LMDZPedia LMDZPedia http://lmdz-forge.lmd.jussieu.fr/mediawiki/LMDZPedia/index.php/Accueil MediaWiki 1.27.7 first-letter Média Spécial Discussion Utilisateur Discussion utilisateur LMDZPedia Discussion LMDZPedia Fichier Discussion fichier MediaWiki Discussion MediaWiki Modèle Discussion modèle Aide Discussion aide Catégorie Discussion catégorie Gadget Gadget talk Gadget definition Gadget definition talk Accueil 0 1 1 2020-10-17T16:50:34Z MediaWiki default 0 wikitext text/x-wiki <strong>MediaWiki a été installé.</strong> Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. == Pour démarrer == * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] cda00254ef04d864e20adba5d4e38c2d2feef2a8 10 1 2020-11-16T11:30:25Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. == Pour démarrer == * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 6e3dca242b1da08285b791305324f1ff246faab2 11 10 2020-11-16T11:32:41Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[Média:lmdzpedia.png]] Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. == Pour démarrer == * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 8cb7e56bd2c106744f759a4e1a435d6816432f0c 12 11 2020-11-16T11:33:08Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[Média:Lmdzpedia.png]] Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. == Pour démarrer == * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 7885d21b98d4fa63c7446851301f22411f425445 14 12 2020-11-16T11:34:13Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. == Pour démarrer == * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 37deead6f574b187506bed18e0328255f1f4c174 15 14 2020-11-16T11:36:24Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] ''The ultimate LMDZ knowledge database'' Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. == Pour démarrer == * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] fbac580d1229cde9675b86c6fcdc9187026151fc 16 15 2020-11-16T11:39:59Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] ''The ultimate LMDZ knowledge database'' [//lmdz-forge.lmd.jussieu.fr/mediawiki/index.php/Sp%c3%a9cial:Toutes_les_pages Toutes les pages] Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. == Pour démarrer == * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 06e490ddc9ccff1917e90c05547a5b19e4644c29 17 16 2020-11-16T11:41:13Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] ''The ultimate LMDZ knowledge database'' [//lmdz-forge.lmd.jussieu.fr/mediawiki/index.php/Sp%c3%a9cial:Toutes_les_pages Toutes les pages] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] b934fa6e33c82aadb4060597774977bfb616a6a7 18 17 2020-11-16T11:43:16Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] ''The ultimate LMDZ knowledge database'' [//lmdz-forge.lmd.jussieu.fr/mediawiki/index.php/Sp%c3%a9cial:Toutes_les_pages Toutes les pages] [[Sp%c3%a9cial:Toutes_les_pages]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] c721b915485b13e6fe32265c5e9d1aeb49937d63 19 18 2020-11-16T11:45:19Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] a5e9bc29f56f1509df0fa0187fac4aaa36cdf895 31 19 2021-01-22T21:08:08Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 20a501aa5acd81ba8f7b22d5ae4ae54fe9a2f54e 32 31 2021-01-22T21:09:51Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 54d6847113540afd9d84d00732b78230ab41a5fa Critère de CFL pour la verticale 0 2 2 2020-10-17T20:32:16Z Lfairhead 1 Page créée avec « == Critère de Courant == Les messages : "On viole le CFL Vertical" ne sont pas anormaux. Ils indiquent qu'on advecte verticalement plus que le contenu d'une maille. C... » wikitext text/x-wiki == Critère de Courant == Les messages : "On viole le CFL Vertical" ne sont pas anormaux. Ils indiquent qu'on advecte verticalement plus que le contenu d'une maille. Cette advection avec CFL>1 marche. Le message indique que le modèle est "agité" et que, si le nombre de points concernés devenait grand, la question pourrait se poser de réduire le pas de temps. En effet, le traitement spécifique fait pour CFL>1 peut ralentir le code. 18a76200f316747dc3f8e016479f26c47d093e64 29 2 2021-01-22T21:03:07Z Lfairhead 1 wikitext text/x-wiki == Critère de Courant == Les messages : "On viole le CFL Vertical" ne sont pas anormaux. Ils indiquent qu'on advecte verticalement plus que le contenu d'une maille. Cette advection avec CFL>1 marche. Le message indique que le modèle est "agité" et que, si le nombre de points concernés devenait grand, la question pourrait se poser de réduire le pas de temps. En effet, le traitement spécifique fait pour CFL>1 peut ralentir le code. [[Category:Dynamique]] f08697d65962ecdb728cfdc5661b3e236dbdda39 Halos 0 3 3 2020-10-17T21:27:48Z Lfairhead 1 Page créée avec « Il faut se méfier car avec les découpages en domaines MPI, si on regarde dans un halo à un moment avant qu'il soit correctement rempli, alors on peut y trouver n'impo... » wikitext text/x-wiki Il faut se méfier car avec les découpages en domaines MPI, si on regarde dans un halo à un moment avant qu'il soit correctement rempli, alors on peut y trouver n'importe quoi. Un peu de nomenclature: ijb_u => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_u": grille U ije_u => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_u": grille U ijb_v => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_v": grille V ije_v => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_v": grille V Ces bornes incluent les halos, alors que les ij_begin et ij_end non (à vérifier; c.f. parallel_lmdz.F90). Les scalaires, qui ne sont techniquement pas sur la grille "U", sont indicés comme sur une grille U puisque la grille scalaire est de la même forme. Les routines Register_SwapField servent à enregistrer les valeurs aux frontières internes de chaque domaine pour pouvoir ensuite les transmettre aux voisins qui en ont besoin pour remplir leurs halos (frontières externes). Donc pour ce qui est de la différence entre ps_dyn et ps dans call_calfis, les halos ne sont pas à jour dans ps_dyn, alors qu'ils le sont dans ps, après appel à Register_SwapField. 7600f8e59dfff989ed750ab694f48d8e74167a92 39 3 2021-01-22T21:17:52Z Lfairhead 1 wikitext text/x-wiki Il faut se méfier car avec les découpages en domaines MPI, si on regarde dans un halo à un moment avant qu'il soit correctement rempli, alors on peut y trouver n'importe quoi. Un peu de nomenclature: ijb_u => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_u": grille U ije_u => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_u": grille U ijb_v => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_v": grille V ije_v => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_v": grille V Ces bornes incluent les halos, alors que les ij_begin et ij_end non (à vérifier; c.f. parallel_lmdz.F90). Les scalaires, qui ne sont techniquement pas sur la grille "U", sont indicés comme sur une grille U puisque la grille scalaire est de la même forme. Les routines Register_SwapField servent à enregistrer les valeurs aux frontières internes de chaque domaine pour pouvoir ensuite les transmettre aux voisins qui en ont besoin pour remplir leurs halos (frontières externes). Donc pour ce qui est de la différence entre ps_dyn et ps dans call_calfis, les halos ne sont pas à jour dans ps_dyn, alors qu'ils le sont dans ps, après appel à Register_SwapField. [[Category:Parallel]] b030e5d1c25baf47b7576ec579f9be07ec3f6cf1 LMDZ sur 2 processus 0 4 4 2020-10-17T21:32:12Z Lfairhead 1 Page créée avec « == Parallélisation == Si on exécute LMDZ en parallèle sur 2 processus, on n'a pas besoin d'ajuster le fichier "Bands...", la meilleure répartition est simplement la d... » wikitext text/x-wiki == Parallélisation == Si on exécute LMDZ en parallèle sur 2 processus, on n'a pas besoin d'ajuster le fichier "Bands...", la meilleure répartition est simplement la division du domaine en deux parties de tailles égales. Le fichier Bands n'a donc pas besoin d'être présent. 42fe1a6a11e2eb94993b120aa0f17b24d45e85f1 40 4 2021-01-22T21:18:36Z Lfairhead 1 /* Parallélisation */ wikitext text/x-wiki == Parallélisation == Si on exécute LMDZ en parallèle sur 2 processus, on n'a pas besoin d'ajuster le fichier "Bands...", la meilleure répartition est simplement la division du domaine en deux parties de tailles égales. Le fichier Bands n'a donc pas besoin d'être présent. [[Category:parallel]] d88cb2fc8b48b051a1dea897b61cda5199b72f64 Albédo avec bucket 0 5 5 2020-10-17T21:39:35Z Lfairhead 1 Page créée avec « Le passage d'Orchidée à Bucket a tendance à beaucoup refroidir. On peut le comprendre en regardant les cartes d'albédo continental et la paramétrisation de la neig... » wikitext text/x-wiki Le passage d'Orchidée à Bucket a tendance à beaucoup refroidir. On peut le comprendre en regardant les cartes d'albédo continental et la paramétrisation de la neige (procédure albsno). Comme c'est du sol nu partout, à la moindre poudrée on se retrouve avec un albédo de 0,8 sur de grandes mailles. Quelques pistes pour modifier ce comportement : * dans albsno, diminuer veget (défaut 1 partout soit sol nu) * fraction de neige en cas d'épaisseur faible : défaut zfra(i) = MAX(0.0,MIN(1.0, snow(i)/(snow(i)+10.))) soit couverture de 50% de la maille avec 3 cm de neige en moyenne (en comptant une masse volumique de la neige de 300 kg m-3 environ). On peut augmenter ce 10 à 50 par exemple. * jouer sur l'âge de la neige (agesno) pour ne pas remettre à "100% neige fraiche" dès qu'il tombe qqch. agesno(i) = (agesno(i) + (1.-agesno(i)/50.)*dtime/86400.)& * EXP(-1.*MAX(0.0,precip_snow(i))*dtime/0.3) Ce qui correspond à remettre agesno à 0 avec une hauteur caractéristique de 1mm d'épaisseur tombée. J'ai remplacé ce 0.3 par 5. f3ddf1844bfeabea455411a89715e721986b99bc 33 5 2021-01-22T21:13:19Z Lfairhead 1 wikitext text/x-wiki Le passage d'Orchidée à Bucket a tendance à beaucoup refroidir. On peut le comprendre en regardant les cartes d'albédo continental et la paramétrisation de la neige (procédure albsno). Comme c'est du sol nu partout, à la moindre poudrée on se retrouve avec un albédo de 0,8 sur de grandes mailles. Quelques pistes pour modifier ce comportement : * dans albsno, diminuer veget (défaut 1 partout soit sol nu) * fraction de neige en cas d'épaisseur faible : défaut zfra(i) = MAX(0.0,MIN(1.0, snow(i)/(snow(i)+10.))) soit couverture de 50% de la maille avec 3 cm de neige en moyenne (en comptant une masse volumique de la neige de 300 kg m-3 environ). On peut augmenter ce 10 à 50 par exemple. * jouer sur l'âge de la neige (agesno) pour ne pas remettre à "100% neige fraiche" dès qu'il tombe qqch. agesno(i) = (agesno(i) + (1.-agesno(i)/50.)*dtime/86400.)& * EXP(-1.*MAX(0.0,precip_snow(i))*dtime/0.3) Ce qui correspond à remettre agesno à 0 avec une hauteur caractéristique de 1mm d'épaisseur tombée. J'ai remplacé ce 0.3 par 5. [[Category:Physique]] [[Category:HowTo]] e692795e2b9898ba406f38034471881b0fca3b71 ExempleMaths 0 6 6 2020-11-14T16:17:52Z Lfairhead 1 Page créée avec « <!-- some LaTeX macros we want to use: --> $$\newcommand{\Re}{\mathrm{Re}\,} \newcommand{\pFq}[5]{{}_{#1}\mathrm{F}_{#2} \left( \genfrac{}{}{0pt}{}{#3}{#4} \bigg| {#5} \ri... » wikitext text/x-wiki <!-- some LaTeX macros we want to use: --> $$\newcommand{\Re}{\mathrm{Re}\,} \newcommand{\pFq}[5]{{}_{#1}\mathrm{F}_{#2} \left( \genfrac{}{}{0pt}{}{#3}{#4} \bigg| {#5} \right)}$$ We consider, for various values of $$s$$, the $$n$$-dimensional integral \begin{align} \label{def:Wns} W_n (s) &:= \int_{[0, 1]^n} \left| \sum_{k = 1}^n \mathrm{e}^{2 \pi \mathrm{i} \, x_k} \right|^s \mathrm{d}\boldsymbol{x} \end{align} which occurs in the theory of uniform random walk integrals in the plane, where at each step a unit-step is taken in a random direction. As such, the integral \eqref{def:Wns} expresses the $$s$$-th moment of the distance to the origin after $$n$$ steps. By experimentation and some sketchy arguments we quickly conjectured and strongly believed that, for $$k$$ a nonnegative integer \begin{align} \label{eq:W3k} W_3(k) &= \Re \, \pFq32{\frac12, -\frac k2, -\frac k2}{1, 1}{4}. \end{align} Appropriately defined, \eqref{eq:W3k} also holds for negative odd integers. The reason for \eqref{eq:W3k} was long a mystery, but it will be explained at the end of the paper. df498e675bb86942d0d3d9bad139486ca6c11184 Eau Condensee Fisrtilp 0 7 7 2020-11-14T17:44:39Z Lfairhead 1 Page créée avec « $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcomma... » wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques~: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques~: === Grandeurs conservées dans les \\ \underline{transformations adiabatiques où le changement de pression est purement hydrostatique}. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} \begin{tabular}{ll} Energie statique humide : & $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ \\ & \\ Energie statique avec eau liquide : & $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ \\ & \\ Energie statique sans nom : & $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ \\ & \\ Energie statique sèche : & $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ \\ (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) & \\ & \\ \end{tabular} \\ 6275d401772c35b99ebb3e634814c26a73a8158a 36 7 2021-01-22T21:15:46Z Lfairhead 1 wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques~: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques~: === Grandeurs conservées dans les \\ \underline{transformations adiabatiques où le changement de pression est purement hydrostatique}. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} \begin{tabular}{ll} Energie statique humide : & $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ \\ & \\ Energie statique avec eau liquide : & $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ \\ & \\ Energie statique sans nom : & $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ \\ & \\ Energie statique sèche : & $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ \\ (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) & \\ & \\ \end{tabular} \\ [[Category:Physique]] 1c32ed47b6ca50ae7f787f745a65fb7b3d3bcd7f 42 36 2021-01-22T22:22:28Z Lfairhead 1 Lfairhead a déplacé la page [[EauCondenseeFisrtilp]] vers [[Eau Condensee Fisrtilp]] wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques~: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques~: === Grandeurs conservées dans les \\ \underline{transformations adiabatiques où le changement de pression est purement hydrostatique}. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} \begin{tabular}{ll} Energie statique humide : & $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ \\ & \\ Energie statique avec eau liquide : & $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ \\ & \\ Energie statique sans nom : & $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ \\ & \\ Energie statique sèche : & $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ \\ (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) & \\ & \\ \end{tabular} \\ [[Category:Physique]] 1c32ed47b6ca50ae7f787f745a65fb7b3d3bcd7f Précipitations neigeuses pour des températures négatives proches de 0 0 8 8 2020-11-15T11:53:05Z Lfairhead 1 Page créée avec « \newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcomman... » wikitext text/x-wiki \newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle} \begin{center} \large {\bf Précipitations neigeuses pour des températures négatives proches de 0$^{\circ}$C~: \\ calculs approchés pour une maille horizontalement homogène. (March 2016)} \\[1.0cm] {\bf LMDZ } \today \\[1.0cm] \hrule \end{center} \vspace{.7cm} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --0--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Nous considérons une couche nuageuse homogène de température négative T, proche de la température de fusion $T_f$. L'eau nuageuse est alors essentiellement sous forme liquide et nous allons négliger la phase glace~: $$ q_l = q_t - \qsati(T) $$ où l'humidité saturante $\qsat$ est prise sur la glace. Cependant, les deux humidités saturantes étant très proches au voisinages de $T_f$, nous allons, pour simplifier, prendre pour humidité saturante $\qsat$ sur l'eau liquide dans tous les calculs qui suivent. La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en excès par rapport à un seuil $q_{lt}$ est convertie en précipitation avec un temps de relaxation $\tau_{pr}$. Pour simplifier à nouveau, nous allons considérer cette conversion comme instantanée. La concentration massique de l'eau précipitante $q_p$ s'écrit alors~: $$ q_p = q_t - q_{lt} $$ Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes les précipitations formées au-dessous de $T_f$. Ceci entraîne une élévation de température $\delta T$ telle que~: $$ C_p \delta T = L'_f q_p $$ où~: \begin{equation} L'_f\;= \left \lbrace \begin{array}{ll} L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\ 0 & \text{si} \quad T+\delta T\;>\;T_f \\ \end{array} \right . \end{equation} Partant d'une température $T$ on cherche donc une variation $\delta T$ et une concentration massique en précipitation $q_p$ telles que~: \begin{equation} \left \lbrace \begin{array}{ll} q_l & =\; q_t-\qsat(T+\delta T) \\ q_p & =\; q_l-q_{lt} \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} soit~: \begin{equation} \left \lbrace \begin{array}{ll} q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} La résolution de ce système de deux équations à deux inconnues ($q_p$ et $\delta T$) peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $\qsat(T)$ comme linéaire). \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.5) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.3) \rput(1.8,3.2){$q_p$} %qsat \psline(2.0,2.5)(6.0,1.05) \rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$} \rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$} \psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25) %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersections \pscircle[linewidth=0.3pt](3.74,1.87){0.1} \rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8) \end{pspicture} %% Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage) ne dépasse pas $q_p=\frac{C_p(T_f-T)}{L_f}$, valeur atteinte pour $\delta T = T_f-T$, on voit qu'il ne peut y avoir de solution que si $q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$. Si cette inégalité n'est pas vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait la température du nuage au-dessus de $T_f$, ce qui serait incompatible avec la conversion des précipitations en glace. Proposition~: lorsque $q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$ il ne faut convertir en glace qu'une partie des précipitations, de façon que la température soit amenée à $T_f$, le reste des précipitation restant sous forme de pluie. \\ %% \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.7) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.5) \rput(1.8,3.4){$q_p$} %qsat \psline(2.0,3.0)(7.0,1.05) \rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$} %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersection \psline(4.,2.)(4.,2.22) \rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22) \psline{<->}(4.1,1.)(4.1,2.) \rput(4.5,1.5){glace} \psline{<->}(3.9,2.)(3.9,2.22) \rput(3.3,2.1){liquide} \end{pspicture} %% {\bf Récapitulation} \\ Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer en glace toutes les précipitations formées en-dessous de 0$^{\circ}$C. Il faut considérer les cas où les précipitations sont nécessairement mixtes. Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la résolution itérative des équations donnant $q_p$ et $\delta T$. \end{document} 1db9893213a5085afb6060677b3643dde25cf9e0 9 8 2020-11-15T11:54:32Z Lfairhead 1 wikitext text/x-wiki $$ \newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle} $$ \begin{center} \large {\bf Précipitations neigeuses pour des températures négatives proches de 0$^{\circ}$C~: \\ calculs approchés pour une maille horizontalement homogène. (March 2016)} \\[1.0cm] {\bf LMDZ } \today \\[1.0cm] \hrule \end{center} \vspace{.7cm} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --0--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Nous considérons une couche nuageuse homogène de température négative T, proche de la température de fusion $T_f$. L'eau nuageuse est alors essentiellement sous forme liquide et nous allons négliger la phase glace~: $$ q_l = q_t - \qsati(T) $$ où l'humidité saturante $\qsat$ est prise sur la glace. Cependant, les deux humidités saturantes étant très proches au voisinages de $T_f$, nous allons, pour simplifier, prendre pour humidité saturante $\qsat$ sur l'eau liquide dans tous les calculs qui suivent. La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en excès par rapport à un seuil $q_{lt}$ est convertie en précipitation avec un temps de relaxation $\tau_{pr}$. Pour simplifier à nouveau, nous allons considérer cette conversion comme instantanée. La concentration massique de l'eau précipitante $q_p$ s'écrit alors~: $$ q_p = q_t - q_{lt} $$ Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes les précipitations formées au-dessous de $T_f$. Ceci entraîne une élévation de température $\delta T$ telle que~: $$ C_p \delta T = L'_f q_p $$ où~: \begin{equation} L'_f\;= \left \lbrace \begin{array}{ll} L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\ 0 & \text{si} \quad T+\delta T\;>\;T_f \\ \end{array} \right . \end{equation} Partant d'une température $T$ on cherche donc une variation $\delta T$ et une concentration massique en précipitation $q_p$ telles que~: \begin{equation} \left \lbrace \begin{array}{ll} q_l & =\; q_t-\qsat(T+\delta T) \\ q_p & =\; q_l-q_{lt} \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} soit~: \begin{equation} \left \lbrace \begin{array}{ll} q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} La résolution de ce système de deux équations à deux inconnues ($q_p$ et $\delta T$) peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $\qsat(T)$ comme linéaire). \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.5) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.3) \rput(1.8,3.2){$q_p$} %qsat \psline(2.0,2.5)(6.0,1.05) \rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$} \rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$} \psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25) %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersections \pscircle[linewidth=0.3pt](3.74,1.87){0.1} \rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8) \end{pspicture} %% Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage) ne dépasse pas $q_p=\frac{C_p(T_f-T)}{L_f}$, valeur atteinte pour $\delta T = T_f-T$, on voit qu'il ne peut y avoir de solution que si $q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$. Si cette inégalité n'est pas vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait la température du nuage au-dessus de $T_f$, ce qui serait incompatible avec la conversion des précipitations en glace. Proposition~: lorsque $q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$ il ne faut convertir en glace qu'une partie des précipitations, de façon que la température soit amenée à $T_f$, le reste des précipitation restant sous forme de pluie. \\ %% \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.7) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.5) \rput(1.8,3.4){$q_p$} %qsat \psline(2.0,3.0)(7.0,1.05) \rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$} %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersection \psline(4.,2.)(4.,2.22) \rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22) \psline{<->}(4.1,1.)(4.1,2.) \rput(4.5,1.5){glace} \psline{<->}(3.9,2.)(3.9,2.22) \rput(3.3,2.1){liquide} \end{pspicture} %% {\bf Récapitulation} \\ Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer en glace toutes les précipitations formées en-dessous de 0$^{\circ}$C. Il faut considérer les cas où les précipitations sont nécessairement mixtes. Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la résolution itérative des équations donnant $q_p$ et $\delta T$. \end{document} b957ec8785eb8280586e67dbbae1e0c36cf01aa6 41 9 2021-01-22T22:21:55Z Lfairhead 1 wikitext text/x-wiki $$ \newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle} $$ == Précipitations neigeuses pour des températures négatives proches de 0&deg;C: calculs approchés pour une maille horizontalement homogène. == (Mars 2016) Nous considérons une couche nuageuse homogène de température négative T, proche de la température de fusion $$T_f$$. L'eau nuageuse est alors essentiellement sous forme liquide et nous allons négliger la phase glace: $$ q_l = q_t - \qsati(T) $$ où l'humidité saturante $$\qsat$$ est prise sur la glace. Cependant, les deux humidités saturantes étant très proches au voisinages de $$T_f$$, nous allons, pour simplifier, prendre pour humidité saturante $$\qsat$$ sur l'eau liquide dans tous les calculs qui suivent. La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en excès par rapport à un seuil $$q_{lt}$$ est convertie en précipitation avec un temps de relaxation $$\tau_{pr}$$. Pour simplifier à nouveau, nous allons considérer cette conversion comme instantanée. La concentration massique de l'eau précipitante $$q_p$$ s'écrit alors: $$ q_p = q_t - q_{lt} $$ Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes les précipitations formées au-dessous de $$T_f$$. Ceci entraîne une élévation de température $$\delta T$$ telle que~: $$ C_p \delta T = L'_f q_p $$ où: \begin{equation} L'_f\;= \left \lbrace \begin{array}{ll} L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\ 0 & \text{si} \quad T+\delta T\;>\;T_f \\ \end{array} \right . \end{equation} Partant d'une température $$T$$ on cherche donc une variation $$\delta T$$ et une concentration massique en précipitation $$q_p$$ telles que: \begin{equation} \left \lbrace \begin{array}{ll} q_l & =\; q_t-\qsat(T+\delta T) \\ q_p & =\; q_l-q_{lt} \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} soit: \begin{equation} \left \lbrace \begin{array}{ll} q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} La résolution de ce système de deux équations à deux inconnues ($$q_p$$ et $$\delta T$$) peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $$\qsat(T)$$ comme linéaire). \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.5) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.3) \rput(1.8,3.2){$q_p$} %qsat \psline(2.0,2.5)(6.0,1.05) \rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$} \rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$} \psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25) %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersections \pscircle[linewidth=0.3pt](3.74,1.87){0.1} \rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8) \end{pspicture} %% Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage) ne dépasse pas $$q_p=\frac{C_p(T_f-T)}{L_f}$$, valeur atteinte pour $$\delta T = T_f-T$$, on voit qu'il ne peut y avoir de solution que si $$q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$$. Si cette inégalité n'est pas vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait la température du nuage au-dessus de $$T_f$$, ce qui serait incompatible avec la conversion des précipitations en glace. Proposition: lorsque $$q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$$ il ne faut convertir en glace qu'une partie des précipitations, de façon que la température soit amenée à $$T_f$$, le reste des précipitation restant sous forme de pluie. \\ %% \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.7) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.5) \rput(1.8,3.4){$q_p$} %qsat \psline(2.0,3.0)(7.0,1.05) \rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$} %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersection \psline(4.,2.)(4.,2.22) \rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22) \psline{<->}(4.1,1.)(4.1,2.) \rput(4.5,1.5){glace} \psline{<->}(3.9,2.)(3.9,2.22) \rput(3.3,2.1){liquide} \end{pspicture} '''Récapitulation''' Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer en glace toutes les précipitations formées en-dessous de 0&deg;C. Il faut considérer les cas où les précipitations sont nécessairement mixtes. Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la résolution itérative des équations donnant $$q_p$$ et $$\delta T$$. [[Category:Physique]] 12e2e1b14118b489f1bda7478bad1052d2b7da00 44 41 2021-01-22T22:25:57Z Lfairhead 1 wikitext text/x-wiki $$ \newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle} $$ == Précipitations neigeuses pour des températures négatives proches de 0&deg;C: calculs approchés pour une maille horizontalement homogène. == (Mars 2016) Nous considérons une couche nuageuse homogène de température négative T, proche de la température de fusion $$T_f$$. L'eau nuageuse est alors essentiellement sous forme liquide et nous allons négliger la phase glace: $$ q_l = q_t - \qsati(T) $$ où l'humidité saturante $$\qsat$$ est prise sur la glace. Cependant, les deux humidités saturantes étant très proches au voisinages de $$T_f$$, nous allons, pour simplifier, prendre pour humidité saturante $$\qsat$$ sur l'eau liquide dans tous les calculs qui suivent. La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en excès par rapport à un seuil $$q_{lt}$$ est convertie en précipitation avec un temps de relaxation $$\tau_{pr}$$. Pour simplifier à nouveau, nous allons considérer cette conversion comme instantanée. La concentration massique de l'eau précipitante $$q_p$$ s'écrit alors: $$ q_p = q_t - q_{lt} $$ Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes les précipitations formées au-dessous de $$T_f$$. Ceci entraîne une élévation de température $$\delta T$$ telle que~: $$ C_p \delta T = L'_f q_p $$ où: \begin{equation} L'_f\;= \left \lbrace \begin{array}{ll} L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\ 0 & \text{si} \quad T+\delta T\;>\;T_f \\ \end{array} \right . \end{equation} Partant d'une température $$T$$ on cherche donc une variation $$\delta T$$ et une concentration massique en précipitation $$q_p$$ telles que: \begin{equation} \left \lbrace \begin{array}{ll} q_l & =\; q_t-\qsat(T+\delta T) \\ q_p & =\; q_l-q_{lt} \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} soit: \begin{equation} \left \lbrace \begin{array}{ll} q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\ C_p \delta T & =\;L'_f q_p \\ \end{array} \right . \end{equation} La résolution de ce système de deux équations à deux inconnues ($$q_p$$ et $$\delta T$$) peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $$\qsat(T)$$ comme linéaire). \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.5) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.3) \rput(1.8,3.2){$q_p$} %qsat \psline(2.0,2.5)(6.0,1.05) \rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$} \rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$} \psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25) %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersections \pscircle[linewidth=0.3pt](3.74,1.87){0.1} \rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8) \end{pspicture} %% Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage) ne dépasse pas $$q_p=\frac{C_p(T_f-T)}{L_f}$$, valeur atteinte pour $$\delta T = T_f-T$$, on voit qu'il ne peut y avoir de solution que si $$q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$$. Si cette inégalité n'est pas vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait la température du nuage au-dessus de $$T_f$$, ce qui serait incompatible avec la conversion des précipitations en glace. Proposition: lorsque $$q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$$ il ne faut convertir en glace qu'une partie des précipitations, de façon que la température soit amenée à $$T_f$$, le reste des précipitation restant sous forme de pluie. \\ %% \psset{unit=0.1\linewidth} \begin{pspicture}(8,3.7) %axe \psline{->}(2.,1.0)(7.8,1.0) \rput(7.7,0.8){$\delta T$} \psline{->}(2.,1.0)(2.,3.5) \rput(1.8,3.4){$q_p$} %qsat \psline(2.0,3.0)(7.0,1.05) \rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$} %Delta T \psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0) \psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0) \psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0) \psline[linestyle=dashed](2.0,2.0)(4.0,2.0) \rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$} \rput(3.8,0.8){$T_f-T$} %Intersection \psline(4.,2.)(4.,2.22) \rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$} \psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22) \psline{<->}(4.1,1.)(4.1,2.) \rput(4.5,1.5){glace} \psline{<->}(3.9,2.)(3.9,2.22) \rput(3.3,2.1){liquide} \end{pspicture} '''Récapitulation''' Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer en glace toutes les précipitations formées en-dessous de 0&deg;C. Il faut considérer les cas où les précipitations sont nécessairement mixtes. Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la résolution itérative des équations donnant $$q_p$$ et $$\delta T$$. [[Category:Physique]] [[Category:Notes Techniques]] 40a4fa8f04b68c6725077a9bebf60ba664eddae2 Fichier:Lmdzpedia.png 6 9 13 2020-11-16T11:33:34Z Lfairhead 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Performance de FFTW 0 10 20 2021-01-22T17:37:49Z Lfairhead 1 Page créée avec « Avec FFT le filtre "coûte" O(n*log(n)) opérations, sans fft le filtre "coûte" O(n*n) opérations, où n est le nombre de points en longitude. Donc l'utilisation de la F... » wikitext text/x-wiki Avec FFT le filtre "coûte" O(n*log(n)) opérations, sans fft le filtre "coûte" O(n*n) opérations, où n est le nombre de points en longitude. Donc l'utilisation de la FFT doit être d'autant plus intéressante qu'on monte en résolution. Ehouarn Millour a fait quelques test de son côté (en MPI seul), sur la machine Ada de l'IDRIS en 2013, en mode "newtonien" (donc avec dynamique seule). À "basse" résolution, l'avantage du filtre n'était pas encore très important : * En 64x48x26 : (sur 16 procs), pour une année kronienne (année de la planète Saturne) ** sans FFT : 3.91h ** avec FFT : 3.77h * En 128x128x26: (sur 32 procs), pour une année kronienne ** sans FFT : 19h ** avec FFT : 18h * En 240x240x26: (64 procs), pour un quart d'année kronienne ** sans FFT : 14.5h ** avec FFT : 11h 12e2eb79ee2ce650ae1653467b968cc11e616c4e Tiedke and iflag cldcon 0 12 22 2021-01-22T17:40:18Z Lfairhead 1 Page créée avec « With Tiedke's convection scheme, iflag_cldcon=-2 gives a better representaion of low clouds radiative effect over the tropical oceans than iflag_cldcon=-1. » wikitext text/x-wiki With Tiedke's convection scheme, iflag_cldcon=-2 gives a better representaion of low clouds radiative effect over the tropical oceans than iflag_cldcon=-1. 2f086f9bba84e065750652b4e442238bff26c837 LMDZ zoom collection 0 14 24 2021-01-22T17:44:10Z Lfairhead 1 Page créée avec « == Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs == Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXr... » wikitext text/x-wiki == Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs == Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"] b5ce4bb46ce823167a53c89d9825d5fa2c7c149e 27 24 2021-01-22T21:01:09Z Lfairhead 1 wikitext text/x-wiki == Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs == Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"] [[Category:Zoom]] 64d72813ac853a02cb301af0661b829848e705c4 28 27 2021-01-22T21:01:40Z Lfairhead 1 wikitext text/x-wiki == Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs == Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"] [[Catégorie:Zoom]] 2dd0bae5928f4465eeebc0f408218caeb9dd3d61 Catégorie:Zoom 14 15 26 2021-01-22T21:00:19Z Lfairhead 1 Page créée avec « Informations concernant le zoom » wikitext text/x-wiki Informations concernant le zoom 20052b01657abe705b838a16d0dceae69e3c023a Catégorie:Dynamique 14 16 30 2021-01-22T21:03:37Z Lfairhead 1 Page créée avec « Les informations de LMDZPedia concernant la dynamique » wikitext text/x-wiki Les informations de LMDZPedia concernant la dynamique c61e8383f0e46cab3109a59ab5d0ff6167debbb0 Catégorie:Physique 14 17 34 2021-01-22T21:13:48Z Lfairhead 1 Page créée avec « Informations concernant la physique LMDZ » wikitext text/x-wiki Informations concernant la physique LMDZ fdab835745d7efcfbc7e4910d9987f4ce1a42fe4 Catégorie:HowTo 14 18 35 2021-01-22T21:14:13Z Lfairhead 1 Page créée avec « Les How-Tos » wikitext text/x-wiki Les How-Tos 31ad2cf0ad11d4591a13dcc100b252ca5c7bf300 48 35 2021-01-23T17:55:57Z Lfairhead 1 wikitext text/x-wiki Les How-Tos [[Category:FAQ]] 582e23827254610fd15b30350f4d19dbe11846f0 Catégorie:Guidage 14 19 38 2021-01-22T21:16:54Z Lfairhead 1 Page créée avec « Informations sur le guidage » wikitext text/x-wiki Informations sur le guidage 6f829dff8c760f39a2673478273bb554a11c603f Catégorie:Notes Techniques 14 21 45 2021-01-22T22:26:15Z Lfairhead 1 Page créée avec « Index des notes techniques » wikitext text/x-wiki Index des notes techniques 5e5a4f99b0a42fa2a8c6a9aabe5b54f273f46546 Pmagic 0 22 46 2021-01-23T17:54:17Z Lfairhead 1 Page créée avec « À n’activer qu’en simulation couplée d’équilibre present-day. En pré-industriel, on a un forcage anthropique nul (par définition). On a un bilan net pré-ind... » wikitext text/x-wiki À n’activer qu’en simulation couplée d’équilibre present-day. En pré-industriel, on a un forcage anthropique nul (par définition). On a un bilan net pré-industriel au sommet Bpi = 0 W / m2 Et une température globale d’équilibre Tpi. En actuel, sur une décennie à fixer, on a un forçage donné. Disons F=1 W/m2. Supposons que la sensibilité à l’équilibre de l’atmosphère soit de 1 K / W / m2. Alors, à l’équilibre pour ce forçage, c’est-à-dire au bout de quelques décennies avec le même forçage, on atteindra Teq = Tpi + 1 avec Beq = 0 W / m2. Mais, parce qu’on est en transitoire, la température globale est toujours en retard sur la température d’équilibre. Ce retard est associé à un flux dit "ocean heat uptake" vers l’océan d’environ 0.5 W / m2. L’atmosphère, elle, ne stocke pas d’énergie (elle est trop fine). Donc elle a toujours le même flux net global en bas et en haut. Donc, en période de réchauffement comme en ce moment, on a un flux net non nul de Beq = 0.5 W / m2 en surface et au sommet de l’atmosphère (à savoir que ce flux net est bien en dessous des barres d’erreur des reconstitutions de bilan radiatif à partir des observations). Si le modèle était parfait, si on le forçait par les SST observées avec le forçage des mêmes décennies, on retrouverait ce 0.5 W / m2 en surface sur l’océan (parce que l’atmosphère s’attend à voir un océan à l’équilibre plus chaud qu’il ne l’est) et au sommet de l’atmosphère. Là, pas besoin de faire quoi que ce soit. L’atmosphère voit effectivement des SST plus froides que celles qui seraient atteintes à l’équilibre avec le même forçage. En couplé, si on veut avoir un present day réaliste (comme observé dans le monde réel transitoire) dans une simulation d’équilibre, il faut faire quelque chose pour refroidir l’océan (par rapport à son équilibre futur plus chaud). Le flux qu’il faut pour ca est justement ce ocean heat uptake. Une façon simple de faire ça, c’est du moins ce dont on s’était convaincus avec Jean-Louis, est de booster l’albédo de surface sur océan. Quand on revient au pré-industriel, ou dans les runs transitoires (historical), il faut évidemment enlever ce terme. Remarque pour finir : si le modèle était parfait, il faudrait donc qu’on vise un Beq = 0.5 W / m2 quand on fait le tuning. En fait, le modèle n’est pas assez parfait pour ça. Les structures bougent quand on passe du forcé au couplé. Et, du coup, il se peut qu’il faille un Beq de +/- 2 W / m2 (d’expérience) pour avoir un couplé équilibré. Mais ca n’empêche pas qu’il faut mettre le pmagic si on veut viser une certaine température globale en actuel. Ce sont deux questions différentes. pmagic a quand même un effet en forcé. Très faible car l'albedo de surface sur océan (affecté par pmagic) n'a qu'un effet très faible sur le taux de chauffage solaire dans l'atmosphère. [[Category:paramètres]] 3e7a5cf13bed6b29e9b1993acc5de0e2481a1ec0 Catégorie:Paramètres 14 23 47 2021-01-23T17:54:36Z Lfairhead 1 Page créée avec « Explication des paramètres » wikitext text/x-wiki Explication des paramètres b86146f382e53a816ff9c717599221f3ad06714c Catégorie:FAQ 14 24 49 2021-01-23T17:56:17Z Lfairhead 1 Page créée avec « Foire aux questions » wikitext text/x-wiki Foire aux questions 660ae95af575af268f3067022d58d52885727b17 HowTo: Run at different horizontal resolutions 0 25 50 2021-01-23T18:10:02Z Lfairhead 1 Page créée avec « == What one needs to know to be able to run at a different model resolution == This page contains some information and tips to help you setup a successful run at a differ... » wikitext text/x-wiki == What one needs to know to be able to run at a different model resolution == This page contains some information and tips to help you setup a successful run at a different (horizontal) resolution # You will need input and forcing files at the sought resolution # You will need to adapt the (dynamics) time step <br />As explained in the LMDZ Tutorial courses "dynamics: ..." (e.g. here) there is a simple rule of thumb to know to what extent you need to change the "day_step" (number of dynamical steps per day):<br />day_step(max(iim,jjm)=N) ~ day_step(max(iim,jjm)=M) * N/M<br />Check what the reference values (in the gcm.def.* files in the LMDZ/Deflist directory) are for a given N are to evaluate what is needed for M<br />Example: currently, in gcm.def_144x142 i.e. for iim=144,jjm=142 , day_step=672 so to run at twice that resolution you should halve the time steps and thus use day_step=1944 (and adapt iphysiq accordingly, i.e. double it here) #You might need to change the dissipation constants<br />This is more tricky and less linear than for the time steps; in practice some trial and error will be needed but overall you will need to increase dissipation (i.e. lower le teta* constants) # At present, physics need to be run at a timestep of 15 minutes so you need to adjust iphysiq according to the formula<br />iphysiq = 900 * day_step / 86400 As guidelines, and starting values, you could use or extrapolate from those given in the table below: {|class="wikitable" ! Resolution ! day_step ! tetagdiv ! tetagrot ! tetatemp ! iphysiq |- |96 x 95 (CMIP5) || 480 ( = 180 s) || 5400. || 5400. || 5400. || 5 ( = 15 min) |- |144 x 142 (CMIP6) || 672 ( ~ 128 s) || 3600. || 21600. || 10800. || 7 ( = 15 min) |- |256 x 256 (QUEST) || 1344 (~ 64 s) || 1200. || 7800. || 3800. || 14 ( = 15 min) |} If you have values for other resolutions that work well for you, don't hesitate to contact us so that we can include them in the table 9aae05b36c6aa4791a8ddfd72c8a4cebde210430 51 50 2021-01-23T18:10:37Z Lfairhead 1 wikitext text/x-wiki == What one needs to know to be able to run at a different model resolution == This page contains some information and tips to help you setup a successful run at a different (horizontal) resolution # You will need input and forcing files at the sought resolution # You will need to adapt the (dynamics) time step <br />As explained in the LMDZ Tutorial courses "dynamics: ..." (e.g. here) there is a simple rule of thumb to know to what extent you need to change the "day_step" (number of dynamical steps per day):<br />day_step(max(iim,jjm)=N) ~ day_step(max(iim,jjm)=M) * N/M<br />Check what the reference values (in the gcm.def.* files in the LMDZ/Deflist directory) are for a given N are to evaluate what is needed for M<br />Example: currently, in gcm.def_144x142 i.e. for iim=144,jjm=142 , day_step=672 so to run at twice that resolution you should halve the time steps and thus use day_step=1944 (and adapt iphysiq accordingly, i.e. double it here) #You might need to change the dissipation constants<br />This is more tricky and less linear than for the time steps; in practice some trial and error will be needed but overall you will need to increase dissipation (i.e. lower le teta* constants) # At present, physics need to be run at a timestep of 15 minutes so you need to adjust iphysiq according to the formula<br />iphysiq = 900 * day_step / 86400 As guidelines, and starting values, you could use or extrapolate from those given in the table below: {|class="wikitable" ! Resolution ! day_step ! tetagdiv ! tetagrot ! tetatemp ! iphysiq |- |96 x 95 (CMIP5) || 480 ( = 180 s) || 5400. || 5400. || 5400. || 5 ( = 15 min) |- |144 x 142 (CMIP6) || 672 ( ~ 128 s) || 3600. || 21600. || 10800. || 7 ( = 15 min) |- |256 x 256 (QUEST) || 1344 (~ 64 s) || 1200. || 7800. || 3800. || 14 ( = 15 min) |} If you have values for other resolutions that work well for you, don't hesitate to contact us so that we can include them in the table [[Category:HowTo]] 5ff48883d2cb7723d7e911c3b549876640c78b40 WhatIs: The run.def input file 0 26 52 2021-01-23T18:49:14Z Lfairhead 1 Page créée avec « == About the run.def input file, its format and included def files == The run.def file is a text file that is read at run time by LMDZ (and must thus be present in the sa... » wikitext text/x-wiki == About the run.def input file, its format and included def files == The run.def file is a text file that is read at run time by LMDZ (and must thus be present in the same directory as the executable). It contains the values of various parameters that the user can specify (as "key = value", where "key" is a predefined keyword and "value" may be a real, an integer, a string or a logical) and modify depending on the specific simulation that is intended, e.g. the line: nday = 30 means that when the GCM will run, it will set parameter nday (the number of days to run) to 30. Any line starting with # is a comment, e.g. # nday : length of the simulation (in days) The order in which parameters are given in the run.def file is not important, except if a parameter value is given more than once (not recommended!), then it is the last occurrence that prevails. The run.def file can include other files (based on the same format, lines containing "key = value" or comments) using the INCLUDEDEF keyword, e.g.: INCLUDEDEF=gcm.def In practice, because there are many parameters that one can set/change, it is good practice to separate related sets of parameters in separate files. Reference *.def files are provided in the LMDZ/DefLists directory 12/05/2020 [[Category:WhatIs]] [[Category:inputs]] d39faf3ed2f31e34b0e783a7d117228ab12c43d7 Catégorie:WhatIs 14 27 53 2021-01-23T18:49:44Z Lfairhead 1 Page créée avec « What is ...? [[Category:FAQ]] » wikitext text/x-wiki What is ...? [[Category:FAQ]] 863b6b63fdc875c2b8c21161035f3564c27209b5 WhatIs: The start.nc and startphy.nc input files 0 28 54 2021-01-23T18:51:55Z Lfairhead 1 Page créée avec « == LMDZ initial condition files == To run, LMDZ requires initial conditions (i.e. values of state variables at a given instant). These are provided as two NetCDF files, s... » wikitext text/x-wiki == LMDZ initial condition files == To run, LMDZ requires initial conditions (i.e. values of state variables at a given instant). These are provided as two NetCDF files, start.nc (which contains state variables for the dynamics) and startphy.nc (state variables for the physics). As these files contain information about fields at given grid points, they must be '''at the same resolution''' as LMDZ; in other words, the GCM does not do any interpolation of initial conditions which must thus be provided on the exact same grid that the model uses. [[Category::WhatIs]] [[Category::inputs]] 731793b67ab3ce17a6a2c6f7994c3308c5cc450e 55 54 2021-01-23T18:52:09Z Lfairhead 1 wikitext text/x-wiki == LMDZ initial condition files == To run, LMDZ requires initial conditions (i.e. values of state variables at a given instant). These are provided as two NetCDF files, start.nc (which contains state variables for the dynamics) and startphy.nc (state variables for the physics). As these files contain information about fields at given grid points, they must be '''at the same resolution''' as LMDZ; in other words, the GCM does not do any interpolation of initial conditions which must thus be provided on the exact same grid that the model uses. [[Category:WhatIs]] [[Category:inputs]] bb41e1e4fd81b9aea07174df945546a4254221a2 WhatIs: The makelmdz fcm script 0 29 56 2021-01-23T18:55:24Z Lfairhead 1 Page créée avec « == The makelmdz_fcm script to compile LMDZ == The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which p... » wikitext text/x-wiki == The makelmdz_fcm script to compile LMDZ == The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.). To list available options, run "makelmdz_fcm -h", which should return something like: Usage : makelmdz_fcm [options] -arch nom_arch exec [-h] : brief help [-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19) [-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd) [-prod / -dev / -debug] : compilation mode production (default) / developement / debug [-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false) [-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false) false : no vegetation model orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version) orchidee2.0 : compile using ORCHIDEE 2.0 orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6 true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6 [-chimie INCA/false] : with INCA chemistry model or without (default: false) [-cosp true/false] : compile with/without cosp package (default: false) [-cosp2 true/false] : compile with/without cosp2 package (default: false) [-cospv2 true/false] : compile with/without cospv2 package (default: false) [-sisvat true/false] : compile with/without sisvat package (default: false) [-rrtm true/false] : compile with/without rrtm package (default: false) [-dust true/false] : compile with/without the dust package by Boucher and co (default: false) [-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false) [-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp [-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom) [-io ioipsl/mix/xios] : Input/Output library (default: ioipsl) [-include INCLUDES] : extra include path to add [-cpp CPP_KEY] : additional preprocessing definitions [-adjnt] : adjoint model, not operational ... [-mem] : reduced memory dynamics (if in parallel mode) [-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez) [-link LINKS] : additional links with other libraries [-j n] : active parallel compiling on ntask [-full] : full recompiling [-libphy] : only compile physics package (no dynamics or main program) [-fcm_path path] : path to the fcm tool (default: tools/fcm/bin) [-ext_src path] : path to an additional set of routines to compile with the model [-arch_path path] : path to architecture files (default: arch) -arch nom_arch : target architecture exec : executable to build The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD"). As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers). 13/05/2020 [[Category:WhatIs]] 2388b899210929a3968d1a1c830cd0a73955cbb0 WhatIs: The target architecture ("arch") files 0 30 57 2021-01-23T18:59:51Z Lfairhead 1 Page créée avec « == A brief description of the architecture files used by the makelmdz_fcm script == The target architecture files are files used by the makelmdz_fcm compilation script. T... » wikitext text/x-wiki == A brief description of the architecture files used by the makelmdz_fcm script == The target architecture files are files used by the makelmdz_fcm compilation script. These files contain all the necessary information about the local environment, where libraries are located, which compiler, and compiler options will be used, etc. In practice, when the makelmdz_fcm is run with "-arch somename", it will look for files "arch-somename.env", "arch-somename.path" and "arch-somename.fcm" (obviously "somename" can be any string, makelmdz_fcm will adapt the arch file names it seeks) in the LMDZ/arch subdirectory. and link these as "arch.env", "arch.path" and "arch.env" in the LMDZ directory. Re-running makelmdz_fcm with a different argument to the "-arch" option will update these links. '''The arch.env file''' This file is optional. It should contain instructions and declarations related to the environment (e.g. setting up environment variables, or loading modules), necessary prerequisites to compiling LMDZ. For example the "arch/arch-gfortran_CICLAD.env" file that contains: module unload openmpi module load openmpi/1.4.5-gfortran module unload netcdf4 module load netcdf4/4.2.1.1-gfortran export NETCDF_HOME=/opt/netcdf42/gfortran imposes first running some "module" commands and setting the environment variable "NETCDF_HOME" prior to the compilation. '''The arch.path file''' This file contains information about the paths (relative to the LMDZ directory) and options concerning libraries (NetCDF, IOIPSL, etc.) required to compile LMDZ. For example the "arch/arch-gfortran_CICLAD.path" contains: NETCDF_LIBDIR="-L${NETCDF_HOME}/lib -lnetcdf -lnetcdff" NETCDF_INCDIR=-I${NETCDF_HOME}/include IOIPSL_INCDIR=$LMDGCM/../../lib IOIPSL_LIBDIR=$LMDGCM/../../lib ORCH_INCDIR=$LMDGCM/../../lib ORCH_LIBDIR=$LMDGCM/../../lib OASIS_INCDIR=$LMDGCM/../../prism/SX/build/lib/psmile.$couple OASIS_LIBDIR=$LMDGCM/../../prism/SX/lib INCA_LIBDIR=$LMDGCM/../INCA/config/lib INCA_INCDIR=$LMDGCM/../INCA/config/lib XIOS_INCDIR=$LMDGCM/../XIOS/inc XIOS_LIBDIR=$LMDGCM/../XIOS/lib Here the keywords are quite self-explanatory, for each external library, NetCDF, IOIPSL, XIOS, ... one provide the compiling intructions about related "include" directories along with the path to the libraries. '''The arch.fcm file''' This file contains information about the compiler to use and compiler options to set. Each line starts with a reserved keyword, followed by the appropriate specifications. For example the "arch/arch-gfortran_CICLAD.fcm" file contains: %COMPILER $MPI_BIN/mpif90 %LINK $MPI_BIN/mpif90 %AR ar %ARFLAGS rs %MAKE gmake %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE %BASE_FFLAGS -c -fdefault-real-8 -fcray-pointer -frecursive -ffree-line-length-0 -fno-align-commons %PROD_FFLAGS -O3 %DEV_FFLAGS -O -Wall -fbounds-check %DEBUG_FFLAGS -ffpe-trap=invalid,zero,overflow -Wall -fbounds-check -g3 -O0 -fstack-protector-all -fbacktrace %MPI_FFLAGS %OMP_FFLAGS -fopenmp %BASE_LD -Wl,-rpath=$NETCDF_HOME/lib %MPI_LD %OMP_LD -fopenmp Implying that the compiler to use is "mpif90", located in "$MPI_BIN/mpif90" (here $MPI_BIN is an environment variable that has been set via the "module load openmpi/1.4.5-gfortran" command from the corresponding arch-gfortran_CICLAD.env file), that compilation will always include the "-c -fdefault-real-8 -fcray-pointer -frecursive ffree-line-length-0 -fno-align-commons" options, etc. The meaning of the various keywords in the arch.fcm file are: * %COMPILER: The compiler to use * %LINK: The linker to use (usually this is the same as the compiler) * %AR: the archiving tool (to collect objects and build the library, typically "ar") * %ARFLAGS: options to give to the archiving tool * %FPP_FLAGS: options to pass to the preprocessor of the Fortan source code * %FPP_DEF: preprocessing flags to set * %BASE_FFLAGS: compilation flags to alway include when compiling the source code * %PROD_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-prod" option * %DEV_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-dev" option * %DEBUG_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-debug" option * %MPI_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel mpi" or "-parallel mpi_omp" options (i.e. to have a code that can run in MPI) * %OMP_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel omp" or "-parallel mpi_omp" options (i.e. to have a code that can run in OpenMP) * %BASE_LD: flags to add when running the linker * %MPI_LD: flags to add when running the linker when MPI is enabled * %OMP_LD: flags to add when running the linker when OpenMP is enabled 13/05/2020 [[Category:WhatIs]] efb5239b24a1d3d5050de03c19f29d9efe77f754 WhatIs: The traceur.def input file 0 31 58 2021-01-23T19:37:22Z Lfairhead 1 Page créée avec « == The traceur.def input file tells LMDZ about the tracers to advect == The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict:... » wikitext text/x-wiki == The traceur.def input file tells LMDZ about the tracers to advect == The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict: * The first line contains the number n of tracers to advect in the dynamics * The n following lines contain the following set ( two integer numbers and a string): hadv , vadv, tname . hadv and vadv are traceur advection scheme numbers and tname is the tracer name '''Tracer advection schemes''' A few are coded, but not for the parallel case, so we only present the important (i.e. operational) ones here: * 0 : no advection. This tracer will not be advected by the dynamics * 10: advection using a Van Leer scheme. This is the standard advection scheme to use for tracers. * 14: a specific advection scheme for the water vapor tracer (i.e. "H2Ov") '''Illustrative example''' In practice a "traceur.def" file will look like this: 4 14 14 H2Ov 10 10 H2Ol 10 10 H2Oi 00 00 Aga In this example, there are 4 tracers, the first one is "H2Ov" (water vapor) and advected using scheme number 14, the second and third are "H2Ol" (liquid water) and "H2Oi" (water ice), and the last is called "Aga" and completely passive (i.e. untouched by the dynamics). 13/05/2020 [[Category:WhatIs]] bae6819a45ce302a640cd29a0a91f29732ed0d43 Time marching in LMDZ 0 32 59 2021-01-23T22:29:50Z Lfairhead 1 Page créée avec « == Some information about LMDZ time steps (and related input parameters) and time marching scheme == === Overview === LMDZ is a time marching code, which simply means th... » wikitext text/x-wiki == Some information about LMDZ time steps (and related input parameters) and time marching scheme == === Overview === LMDZ is a time marching code, which simply means that the evolution equations of the climate system are solved along time, starting from a given initial condition (which is why the GCM typically requires input files start.nc and startphy.nc to run). In a nutshell: one must distinguish between the time steps for the dynamics and for the physics as the underlying processes (and related numerical constraints) are quite different. In practice the atmospheric motions computed in the dynamics require short time steps (of the order of minutes) whereas (most) processes in the physics can be handled with time steps of a fraction of an hour. The main parameters (typically set in file gcm.def) that set the time steps in the model are the following: * day_step : the number of dynamical time steps per day (must be an integer). Note that this parameter conversely sets the dynamics time step (in s) to dt_dyn=86400/day_step * iphysiq : the rate (in dynamical time steps) at which the dynamics will call the physics, must be an integer (and should be a divisor of day_step so that the physics are called an integer number of times per day). This parameter conversely sets the physics time step (in s) to dt_phys=iphysiq*dt_dyn=86400*(iphysiq/day_step) === Good to know === There is no reason or need to change the physics time step when changing the (horizontal) grid, but there are strong stability constraints for the dynamics which requires using a smaller dynamical time step with finer grids. To decrease dt_dyn one must thus increase day_step, bearing in mind the following constraints: * The time marching scheme in the dynamics is of mixed Leapfrog-Matsuno type (if the parameter "purmats" is set to false in gcm.def, which is the default behavior) . This means that a number of leapfrog steps are done between single Matsuno steps; this number is set by the "iperiod" parameter (also in gcm.def). Stability constraints (loosely put, the Matsuno step recombines solutions diverging away from each other between even and odd leapfrog steps) require keeping iperiod to 10 or less (typically 5 or 7). * It is mandatory that iperiod be a divisor of iphysiq so that the physics package is called over integer cycles of Leapfrog-Matsuno integration. === An illustrative example === As can bee see in the example file (gcm.def_144x142 in the LMDZ DefLists directory, also check [[HowTo:_Run_at_different_horizontal_resolutions|this related HowTo]]): for a 144x142 regular horizontal grid, we set "day_step=672", "iperiod=7" and "iphysiq=7", which implies a dynamical time step dt_dyn=86400./672=128.6 s (i.e. 2.15 minutes) and a physical time step of 86400.*7./672=900 s (i.e. 15 minutes). For an even higher resolution, e.g. 256 x 256 a smaller dynamical step is required and we set "day_step=1344" (i.e. dt_dyn=64.3s), while keeping "iperiod=7" and increasing iphysiq to 14 (i.e. dt_phy=900 s). 13/05/2020 7cdfc6589b43d56af9269f933a48859384c12931 WhatIs: The Bands *.dat file 0 33 60 2021-01-23T22:31:59Z Lfairhead 1 Page créée avec « == What is the Bands_*.dat file produced by LMDZ at run-time == When it is run in parallel (using MPI), LMDZ looks for a file in the current directory that is called "Ban... » wikitext text/x-wiki == What is the Bands_*.dat file produced by LMDZ at run-time == When it is run in parallel (using MPI), LMDZ looks for a file in the current directory that is called "Bands_IIMxJJMxLLMxN.dat", where IIM,JJM,LLM are the model's horizontal and vertical resolution (same as when compiling) and N is the number of MPI processes to use. If there is no "Bands_IIMxJJMxLLMxN.dat", then a default one is created at run-time. Content of the "Bands_IIMxJJMxLLMxN.dat" file: It consists of 4 sections of 2 columns each: the first column contains the MPI process number and the second the number of latitude bands (or columns, for section 4) that are assigned to it. The first section is relative to computations in the dynamics, the second to tracer advection (in the dynamics), the third to dissipation (also in the dynamics) and the fourth to physics. [[Category:WhatIs]] 391a54434914da3733a8b2448081f81ae749ca41 Fichier:Image chaleur sensible.png 6 34 61 2021-01-23T22:42:22Z Lfairhead 1 les variables concernées par la chaleur sensible dans LMDZ wikitext text/x-wiki les variables concernées par la chaleur sensible dans LMDZ 105245fec52ac77f342aa0d81d6606247f87b61e Variables chaleur sensible 0 35 62 2021-01-23T22:50:03Z Lfairhead 1 Page créée avec « [[File:Image chaleur sensible.png|Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments.]] » wikitext text/x-wiki [[File:Image chaleur sensible.png|Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments.]] 68a44346121f09349aa61d22a61d7d7b5147a146 63 62 2021-01-23T22:50:50Z Lfairhead 1 wikitext text/x-wiki [[File:Image chaleur sensible.png||Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments.]] 0a75b85bf10a0aa7c3b99e7d555accd2df8657d3 65 63 2021-01-23T23:04:00Z Lfairhead 1 wikitext text/x-wiki [[File:Image chaleur sensible.png||]] Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments. Cf. [[Diagramme de flot de données|légende plus détaillée]]. Fichier source LibreOffice pour le graphique. Ce diagramme correspond au cas où iflag_split >= 1 et ok_flux_surf est faux. x : hors des poches froides, w : dans les poches froides. e2d290742c3f3c51575e510fd859ce4a5799a328 66 65 2021-01-23T23:04:45Z Lfairhead 1 wikitext text/x-wiki [[File:Image chaleur sensible.png||]] Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments. Cf. [[Diagramme de flot de données|légende plus détaillée]]. Fichier source LibreOffice pour le graphique. Ce diagramme correspond au cas où iflag_split >= 1 et ok_flux_surf est faux. x : hors des poches froides, w : dans les poches froides. [[Category:physique]] 467a6cbc698657de66d10c494723b102f2ed0dea Diagramme de flot de données 0 36 64 2021-01-23T23:03:25Z Lfairhead 1 Page créée avec « Rectangles. Un rectangle pour un contenant : procédure, module ou fichier. La couleur verte pour les modules, la couleur noire pour les procédures, la couleur rouge po... » wikitext text/x-wiki Rectangles. Un rectangle pour un contenant : procédure, module ou fichier. La couleur verte pour les modules, la couleur noire pour les procédures, la couleur rouge pour les fichiers. Une procédure est représentée par l'empilement de deux rectangles : le rectangle supérieur est l'interface de la procédure, le rectangle inférieur contient les données locales. Texte. Une variable de module est en vert au niveau du module. Une variable de module utilisée ou définie dans une procédure, et donc visible dans cette procédure par utilisation (use association) ou descente (host association) est récrite au niveau de cette procédure en bleu. Les variables locales et les arguments des procédures sont aussi en bleu. Les variables des fichiers NetCDF sont en rouge. Si la procédure est une fonction alors le nom de la procédure est en bleu. Connecteurs. Une ligne rouge désigne une lecture ou une écriture dans un fichier, une ligne bleue une affectation ou une association d'arguments. Une ligne verte désigne une association par utilisation ou descente. Une flèche à l'une ou l'autre extrémité d'une ligne indique le sens du transfert de la donnée (le transfert peut se faire dans les deux sens). [[Category:Hidden]] 5fce01d9c443e054090d84af786bb97d1b56b5df Fichier:Profil eau nuageuse.png 6 38 68 2021-01-23T23:15:54Z Lfairhead 1 Profil eau nuageuse wikitext text/x-wiki Profil eau nuageuse be3daea6ccc3c8a68d5437b989738a17c125c8f8 Eau nuageuse 0 39 69 2021-01-23T23:16:34Z Lfairhead 1 Page créée avec « L'eau nuageuse que voit le rayonnement n'est pas la même que l'eau nuageuse utilisée dans la physique et la dynamique. Lors de la conversion en précipitation dans fisrt... » wikitext text/x-wiki L'eau nuageuse que voit le rayonnement n'est pas la même que l'eau nuageuse utilisée dans la physique et la dynamique. Lors de la conversion en précipitation dans fisrtilp, c'est une moyenne de l'eau restante dans le nuage PENDANT la précipitation qui est stockée dans radliq pour le rayonnement, et non l'eau restante À LA FIN du pas de temps, qui elle est utilisée dans la physique et advectée par la dynamique. (C'est un choix qui peut être discuté.) Du coup, il est facile de se perdre et de voir des incohérences dans les sorties entre l'eau qui sort du rayonnement et celle qui sort de la physique. Pour résumer, sont écrites ci-dessous les variables qui sont égales avec entre parenthèses le nom de la routine correspondante ou "netcdf" quand il s'agit des sorties : Rayonnement : xflwc(newmicro) + xfiwc(newmicro) = cldliq(physiq) = radliq(fisrt) = lwcon(netcdf) + iwcon(netcdf) Physique / dynamique : ql_seri(physiq) + qs_seri(physiq) = ocond(netcdf) Attention cependant : radliq(fisrt) /= ocond(netcdf) autrement dit : lwcon(netcdf) + iwcon(netcdf) /= ocond(netcdf) (ce qui n'est pas du tout évident) Si on enlève la moyenne faite par fisrtilp lors de la conversion en précipitation, on obtient bien l'égalité entre l'ensemble des variables. Ci-dessous un exemple de profils des différentes variables. Cette moyenne tend à augmenter l'eau nuageuse transmise au rayonnement. Comme il s'agit d'une moyenne sur le pas de temps plutôt qu'une eau restante à la fin du pas de temps, elle tend donc, a priori, à faire des nuages plus brillants. Cette moyenne remonte à Le Treut et Li (1991), où le pas de temps physique du modèle était d'une demi-heure contre 15 min actuellement. [[File:Profil_eau_nuageuse.png|Profile eau nuageuse]] [[Category::physique]] 070fd38801e9e2b8073ed61d65adf9dd5f71e69c 70 69 2021-01-23T23:16:50Z Lfairhead 1 wikitext text/x-wiki L'eau nuageuse que voit le rayonnement n'est pas la même que l'eau nuageuse utilisée dans la physique et la dynamique. Lors de la conversion en précipitation dans fisrtilp, c'est une moyenne de l'eau restante dans le nuage PENDANT la précipitation qui est stockée dans radliq pour le rayonnement, et non l'eau restante À LA FIN du pas de temps, qui elle est utilisée dans la physique et advectée par la dynamique. (C'est un choix qui peut être discuté.) Du coup, il est facile de se perdre et de voir des incohérences dans les sorties entre l'eau qui sort du rayonnement et celle qui sort de la physique. Pour résumer, sont écrites ci-dessous les variables qui sont égales avec entre parenthèses le nom de la routine correspondante ou "netcdf" quand il s'agit des sorties : Rayonnement : xflwc(newmicro) + xfiwc(newmicro) = cldliq(physiq) = radliq(fisrt) = lwcon(netcdf) + iwcon(netcdf) Physique / dynamique : ql_seri(physiq) + qs_seri(physiq) = ocond(netcdf) Attention cependant : radliq(fisrt) /= ocond(netcdf) autrement dit : lwcon(netcdf) + iwcon(netcdf) /= ocond(netcdf) (ce qui n'est pas du tout évident) Si on enlève la moyenne faite par fisrtilp lors de la conversion en précipitation, on obtient bien l'égalité entre l'ensemble des variables. Ci-dessous un exemple de profils des différentes variables. Cette moyenne tend à augmenter l'eau nuageuse transmise au rayonnement. Comme il s'agit d'une moyenne sur le pas de temps plutôt qu'une eau restante à la fin du pas de temps, elle tend donc, a priori, à faire des nuages plus brillants. Cette moyenne remonte à Le Treut et Li (1991), où le pas de temps physique du modèle était d'une demi-heure contre 15 min actuellement. [[File:Profil_eau_nuageuse.png|Profile eau nuageuse]] [[Category:physique]] 2d52b491fb60ae071d5495d5ace15937e84389e9 XIOS : "something must be wrong with mask index" 0 40 71 2021-01-23T23:21:18Z Lfairhead 1 Page créée avec « Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants : info : If domain dom_out does not have overlapped regions between processes something must... » wikitext text/x-wiki Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants : info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index Vous pouvez ignorer ce message. Dans le cas de LMDZ, on a bien de "l'overlap" entre les domaines de sortie, donc pas de soucis. C'est une mise en garde plus pour les développeurs. Si effectivement on n'a pas de recouvrement entre les domaines, ce message peut être le signe d'un problème lors du calcul des index de transfert entre clients et serveurs. [[Category:faq]] [[Category:xios]] 0726609e146216d668c6f64926e8b2809ce4d9e5 72 71 2021-01-23T23:21:49Z Lfairhead 1 wikitext text/x-wiki Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants : info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index Vous pouvez ignorer ce message. Dans le cas de LMDZ, on a bien de "l'overlap" entre les domaines de sortie, donc pas de soucis. C'est une mise en garde plus pour les développeurs. Si effectivement on n'a pas de recouvrement entre les domaines, ce message peut être le signe d'un problème lors du calcul des index de transfert entre clients et serveurs. [[Category:FAQ]] [[Category:xios]] 77f1baa2ddfd873b539bd4189657803239b2fbe9 Nombre de variables trop grand dans un fichier d'historique, avec XIOS 0 41 73 2021-01-23T23:25:20Z Lfairhead 1 Page créée avec « Symptôme : terminate called after throwing an instance of 'xios::CNetCdfException' what(): Error when calling function nc_enddef(ncId) NetCDF: HDF error Unable t... » wikitext text/x-wiki Symptôme : terminate called after throwing an instance of 'xios::CNetCdfException' what(): Error when calling function nc_enddef(ncId) NetCDF: HDF error Unable to end define mode of this file, given its id: 65536 Program received signal SIGABRT: Process abort signal. Ce problème peut se poser avec XIOS quand on augmente par exemple le niveau de sortie d'un fichier d'historique. C'est un problème de netcdf4 + HDF5 en mode écriture parallèle. Pour une raison obscure, lorsqu'on tente de déclarer trop de champs avec trop de méta-données, une erreur se produit au moment de nc_enddef. C'est un problème de longue date qui combine le nombre de champs, associé à leurs tailles et au volume de méta-données, sans qu'il y ait pour autant une règle claire. Les work-arounds : * mettre moins de variables par fichier : baisser le niveau ou regrouper les variables par niveau dans un même fichier * utiliser la version séquentielle qui fonctionne on ne sait pas trop pourquoi : avoir un seul processus ou un seul serveur XIOS ou utiliser les deux niveaux de serveur qui font des écritures séquentielles au final. * utiliser pnetcdf (format classique) au lieu de netcdf4+HDF5 avec XIOS. Je sais, c'est un peu lourd, mais on n'a pas vraiment le choix que de s'adapter à cette contrainte pour le moment, qui sera peut-être levée un jour. [[Category:FAQ]] [[Category:xios]] 6076326f8a7fadb6d9fcd673d5a34f9705c395e3 Eau Condensee Fisrtilp 0 7 74 42 2021-01-23T23:39:47Z Lfairhead 1 wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques~: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques~: === Grandeurs conservées dans les \\ \underline{transformations adiabatiques où le changement de pression est purement hydrostatique}. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} {| border="1" style="border-collapse:collapse" | Energie statique humide : | $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ |- | Energie statique avec eau liquide : | $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ |- | Energie statique sans nom : | $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ |- | Energie statique sèche : | $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br /> (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) |} [[Category:Physique]] 262f4f93493caad83769be5e542cb96f08f91a0c 75 74 2021-01-23T23:41:02Z Lfairhead 1 wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques: === Grandeurs conservées dans les \\ \underline{transformations adiabatiques où le changement de pression est purement hydrostatique}. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} {| border="1" style="border-collapse:collapse" | Energie statique humide : | $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ |- | Energie statique avec eau liquide : | $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ |- | Energie statique sans nom : | $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ |- | Energie statique sèche : | $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br /> (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) |} [[Category:Physique]] 2f78fbe2be30b28c1e6f7cccf5012982ec613bfb 101 75 2021-01-25T21:19:48Z Lfairhead 1 wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques: === Grandeurs conservées dans les \\ \underline{transformations adiabatiques où le changement de pression est purement hydrostatique}. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} {| border="1" style="border-collapse:collapse" | Energie statique humide : | $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ |- | Energie statique avec eau liquide : | $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ |- | Energie statique sans nom : | $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ |- | Energie statique sèche : | $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br /> (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) |} [[Category:Physique]] [[Category:Notes Techniques]] 4973a0e776cdd04db79d4ba623b7678c35fcc310 103 101 2021-02-01T11:08:42Z Lfairhead 1 /* II - Energies statiques: */ wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques: === Grandeurs conservées dans les \underline{transformations adiabatiques où le changement de pression est purement hydrostatique}. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} {| border="1" style="border-collapse:collapse" | Energie statique humide : | $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ |- | Energie statique avec eau liquide : | $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ |- | Energie statique sans nom : | $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ |- | Energie statique sèche : | $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br /> (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) |} [[Category:Physique]] [[Category:Notes Techniques]] bad4743e50fc64dd01aeb32f764225433438c304 104 103 2021-02-01T11:10:33Z Lfairhead 1 /* II - Energies statiques: */ wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent~: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit~: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne~: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent~: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées~: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques: === Grandeurs conservées dans les \underline{transformations adiabatiques isobares}. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares~: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques: === Grandeurs conservées dans les <u>transformations adiabatiques où le changement de pression est purement hydrostatique</u>. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} {| border="1" style="border-collapse:collapse" | Energie statique humide : | $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ |- | Energie statique avec eau liquide : | $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ |- | Energie statique sans nom : | $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ |- | Energie statique sèche : | $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br /> (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) |} [[Category:Physique]] [[Category:Notes Techniques]] 390ba9ee4e2261e957594534c81e121007841671 106 104 2021-09-13T15:10:23Z Jyg 2 wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud : \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent : \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit : \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne : \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$ : \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat : $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent : \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li : \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent : \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée : $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées : \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques: === Grandeurs conservées dans les <u>transformations adiabatiques isobares</u>. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares : $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne : et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares : $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques: === Grandeurs conservées dans les <u>transformations adiabatiques où le changement de pression est purement hydrostatique</u>. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} {| border="1" style="border-collapse:collapse" | Energie statique humide : | $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ |- | Energie statique avec eau liquide : | $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ |- | Energie statique sans nom : | $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ |- | Energie statique sèche : | $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br /> (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) |} [[Category:Physique]] [[Category:Notes Techniques]] 27f0f761e8d5dd716e62ae727938abbc08353606 107 106 2021-09-14T11:20:16Z Jyg 2 wikitext text/x-wiki $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcommand{\tem}{temp\'erature } \newcommand{\tems}{temp\'eratures } \newcommand{\Tpni}{T_{\text{p,ni}}} \newcommand{\Tp}{T_{\text{p}}} \newcommand{\qpni}{q_{\text{p,ni}}} \newcommand{\qp}{q_{\text{p}}} \newcommand{\qsati}{q_{\text{sat,i}}} \newcommand{\qsat}{q_{\text{sat}}} \newcommand{\hpni}{h_{\text{p,ni}}} \newcommand{\hp}{h_{\text{p}}} %*KEEP,mathwake,T=LATEX. \newcommand{\nab}{\vec{\nabla}} \newcommand{\V}{\vec{V}} \newcommand{\Vt}{\vec{\tilde{V}}} \newcommand{\F}{\vec{F}} \newcommand{\NF}{\|\vec{F}\|} \newcommand{\CD}{C_D} \newcommand{\pt}{\tilde{p}} \newcommand{\Dt}{\tilde{D}} \newcommand{\thetat}{\tilde{\theta}} \newcommand{\alphat}{\tilde{\alpha}} \newcommand{\Mt}{\tilde{M}} \newcommand{\rhot}{\tilde{\rho}} \newcommand{\qt}{\tilde{q}} \newcommand{\Tt}{\tilde{T}} \newcommand{\wt}{\tilde{w}} \newcommand{\wbar}{\overline{w}} \newcommand{\ubar}{\overline{u}} \newcommand{\vbar}{\overline{v}} \newcommand{\qbar}{\overline{q_v}} \newcommand{\omgb}{\overline{\omega}} \newcommand{\omgwb}{\overline{\omega_w}} \newcommand{\omgub}{\overline{\omega_u}} \newcommand{\omgxb}{\overline{\omega_x}} \newcommand{\thetab}{\overline{\theta}} \newcommand{\qvb}{\overline{q_v}} \newcommand{\qvwb}{\overline{q_{vw}}} \newcommand{\qvxb}{\overline{q_{vx}}} \newcommand{\qvw}{q_{vw}} \newcommand{\qvx}{q_{vx}} \newcommand{\thetawb}{\overline{\theta_w}} \newcommand{\thetaub}{\overline{\theta_u}} \newcommand{\thetaxb}{\overline{\theta_x}} \newcommand{\uwb}{\overline{u_w}} \newcommand{\uub}{\overline{u_u}} \newcommand{\uxb}{\overline{u_x}} \newcommand{\vwb}{\overline{v_w}} \newcommand{\vub}{\overline{v_u}} \newcommand{\vxb}{\overline{v_x}} \newcommand{\vwhat}{\hat{v_w}} \newcommand{\vuhat}{\hat{v_u}} \newcommand{\vxhat}{\hat{v_x}} \newcommand{\Kb}{\overline{K}} \newcommand{\alphab}{\overline{\alpha}} \newcommand{\alphawb}{\overline{\alpha_w}} \newcommand{\alphaub}{\overline{\alpha_u}} \newcommand{\alphaxb}{\overline{\alpha_x}} \newcommand{\rhob}{\overline{\rho}} \newcommand{\sigw}{\ensuremath{\sigma_w}} \newcommand{\dlt}{\delta t} \newcommand{\Xrz}{X_{r}} \newcommand{\Xr}[1]{X_{r(#1)}} \newcommand{\Xrpz}{X_{rp}} \newcommand{\Xrp}[1]{X_{rp(#1)}} \newcommand{\Xrvz}{X_{rv}} \newcommand{\Xrv}[1]{X_{rv(#1)}} \newcommand{\Xrhz}{\hat{X}_{r}} \newcommand{\Xrh}[1]{\hat{X}_{r(#1)}} %%%\newcommand{\dlts2}{\frac{\dlt}{2}} \newcommand{\dsdlt}{\frac{2}{\dlt}} \newcommand{\vphi}{\vec{\varphi}} \newcommand{\veta}{\vec{\eta}} \newcommand{\vtheta}{\vec{\theta}} \newcommand{\veps}{\vec{\varepsilon}} \newcommand{\delphi}{\vec{\delta \varphi}} \newcommand{\vG}{\vec{G}} \newcommand{\vf}{\vec{f}} \newcommand{\n}{\vec{n}} \newcommand{\rl}{\rho_{l}} \newcommand{\rv}{\rho_{v}} \newcommand{\vv}{\vec{V}_{v}} \newcommand{\vl}{\vec{V}_{l}} %%%\newcommand{\v}{\vec{V}} \newcommand{\g}{\vec{g}} \newcommand{\dsdt}{\frac {\partial }{\partial t}} \newcommand{\dst}{\partial_t} \newcommand{\dsp}{\partial_p} \newcommand{\dsz}{\partial_z} \newcommand{\dsy}{\partial_y} \newcommand{\dsx}{\partial_x} \newcommand{\dsth}{\partial_{\theta}} \newcommand{\dsq}{\partial_q} \newcommand{\dsv}{\partial_V} \newcommand{\dalpha}{\delta \alpha} \newcommand{\dw}{\delta w} \newcommand{\dqv}{\delta q_v} \newcommand{\dtheta}{\delta \theta} \newcommand{\domg}{\delta \omega} \newcommand{\domgcv}{\delta \omega^{\text{cv}}} %%\newcommand{\domgtop}{\delta \omega_{\text{top}}} \newcommand{\domgtop}{\delta \omega_{w}} %%\newcommand{\domgupper}{\delta \omega_{\text{upper}}} \newcommand{\domgupper}{\delta \omega_{h}} %%\newcommand{\ptop}{p_{\text{top}}} \newcommand{\ptop}{p_{w}} %%\newcommand{\pupper}{p_{\text{upper}}} \newcommand{\pupper}{p_{h}} %%\newcommand{\htop}{h_{\text{top}}} \newcommand{\htop}{h_{w}} %%\newcommand{\hupper}{h_{\text{upper}}} \newcommand{\hupper}{h_{h}} \newcommand{\intw}{\int_{\Sigma_w}} \newcommand{\intu}{\int_{\Sigma_u}} \newcommand{\intx}{\int_{\Sigma_x}} \newcommand{\inte}{\int_{\Sigma_e}} \newcommand{\intp}{\int_{\Sigma'}} \newcommand{\intgw}{\int_{\Gamma_{w,in}}} \newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}} \newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}} \newcommand{\intg}{\int_{\Gamma}} \newcommand{\intgp}{\int_{\Gamma'}} \newcommand{\intgpe}{\int_{\Gamma'_e}} \newcommand{\intgpu}{\int_{\Gamma'_u}} \newcommand{\intgpx}{\int_{\Gamma'_x}} \newcommand{\intgpw}{\int_{\Gamma'_w}} \newcommand{\kgw}{k_{\text{gw}}} \newcommand{\taugw}{\tau_{\text{gw}}} \newcommand{\klift}{k_{\text{lift}}} %%\newcommand{\kliftw}{k_{\text{lift,wk}}} \newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}} \newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}} \newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}} \newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}} \newcommand{\LG}{\ensuremath{L_{\Gamma}}} \newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}} \newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}} \newcommand{\Dw}{\ensuremath{D_{\text{wk}}}} \newcommand{\QI}{\ensuremath{Q_1}} \newcommand{\DQI}{\ensuremath{\delta Q_1}} \newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}} \newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}} \newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}} \newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}} \newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}} \newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}} \newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}} \newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}} \newcommand{\QIw}{\ensuremath{Q_{1,w}}} \newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}} \newcommand{\QIx}{\ensuremath{Q_{1,x}}} \newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}} \newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}} \newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}} \newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}} \newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}} \newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}} \newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}} \newcommand{\QIp}{\ensuremath{Q_{1,p}}} \newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}} \newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}} \newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}} \newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}} \newcommand{\QII}{\ensuremath{Q_2}} \newcommand{\DQII}{\ensuremath{\delta Q_2}} \newcommand{\QIIw}{\ensuremath{Q_{2,w}}} \newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}} \newcommand{\QIIx}{\ensuremath{Q_{2,x}}} \newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}} \newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}} \newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}} \newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}} \newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}} \newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}} \newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}} \newcommand{\QIIp}{\ensuremath{Q_{2,p}}} \newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}} \newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}} \newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}} \newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}} \newcommand{\Sig}{\ensuremath{\Sigma\;}} \newcommand{\Sigp}{\ensuremath{\Sigma'\;}} \newcommand{\Sigw}{\ensuremath{\Sigma_w\;}} \newcommand{\Sige}{\ensuremath{\Sigma_e}} \newcommand{\Sigu}{\ensuremath{\Sigma_u}} \newcommand{\Sigx}{\ensuremath{\Sigma_x}} \newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}} \newcommand{\Wbb}{\bar{\bar{W}}} \newcommand{\wa}{\langle w\rangle} \newcommand{\wpa}{\langle w'\rangle} \newcommand{\wwa}{\langle w^2\rangle} \newcommand{\wwwa}{\langle w^3\rangle} \newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$ Le but de cette note est d'établir les formules menant à la détermination des quantités d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La principale difficulté réside dans le fait que la condensation dégage de la chaleur latente et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire que l'énergie statique humide et la quantité d'eau totale sont conservées dans le processus de condensation. Dans la première version créée par Laurent Li, on suppose que seule la partie nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le système que l'on décrit présente des températures différentes dans le nuage et hors du nuage. Laurent Li résoud&nbsp;: \begin{equation} C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q \label{eq.init} \end{equation} étant entendu que cela s'applique à la partie nuageuse de la maille. Nous voulons, au contraire, écrire que les températures sont toujours uniformisées horizontalement très rapidement (et même on va supposer instantanément). En outre nous allons généraliser les calculs au cas où de la condensation solide est présente et nous allons profiter de l'occasion pour écrire des formules complètes prenant en compte la variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant l'énergie statique humide $$h$$). == Écriture des équations de conservation == Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur $$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du nuage $$h"$$ s'écrivent&nbsp;: \begin{equation} \left \lbrace \begin{array}{ll} h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\ h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\ h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\ \end{array} \right . \end{equation} où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin. La conservation de l'énergie statique humide et de l'eau s'écrit&nbsp;: \begin{equation} \left \lbrace \begin{array}{ll} f h_n + (1-f)h" &=\;h \\ f q_n + (1-f)q" &=\;q \\ \end{array} \right . \end{equation} Ce qui donne&nbsp;: \begin{equation} \left \lbrace \begin{array}{l} T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\ \qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\ \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$&nbsp;: \begin{equation} \left \lbrace \begin{array}{l} C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat&nbsp;: $$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent&nbsp;: \begin{equation} \label{eq.conserv_fin} \left \lbrace \begin{array}{l} C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\ q = f q_n + (1-f) q"\\ \end{array} \right . \end{equation} == Mise en oeuvre == Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est présente. L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme analogue à l'équation initiale (\ref{eq.init}) de Laurent Li&nbsp;: \begin{equation} \label{eq.conserv_fin_lli} C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n \end{equation} On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation (\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$. L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de Laurent&nbsp;: \begin{equation} \displaystyle{ T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]} {1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} } \label{eq.iter} \end{equation} L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée&nbsp;: $$ c\;=\;f[q_n\;-\;\qsat(T'_a)] $$ et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que l'énergie et l'eau soient exactement conservées&nbsp;: \begin{equation} \left \lbrace \begin{array}{l} T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\ q'\;=\;q\;-\;c \\ \end{array} \right . \end{equation} == Annexe: définitions des enthalpies et énergies statiques massiques == === I - Enthalpies massiques: === Grandeurs conservées dans les <u>transformations adiabatiques isobares</u>. \begin{equation} \begin{array}{ll} \left \lbrace \begin{array}{lll} k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\ L_v(T) &=& k_v - k_l \\ L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\ k_d &=& C_{pd} T \\ k_l &=& C_l T \\ k_i &=& C_i T \\ \end{array} \right \rbrace & \left . \begin{array}{l} \rm{enthalpie} \\ k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\ \end{array} \right . \end{array} \end{equation} Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$, l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$ est aussi conservée dans les transformations adiabatiques isobares&nbsp;: $$ k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i $$ On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$, ce qui donne&nbsp;: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom) $$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations adiabatiques isobares&nbsp;: $$ k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l $$ === II - Energies statiques: === Grandeurs conservées dans les <u>transformations adiabatiques où le changement de pression est purement hydrostatique</u>. \begin{equation} \begin{array}{ll} \left . \begin{array}{lll} \rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\ & & \\ \rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz \end{array} \right \rbrace & \left . \begin{array}{l} dk + g dz = 0 \\ \end{array} \right . \end{array} \end{equation} {| border="1" style="border-collapse:collapse" | Energie statique humide : | $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ |- | Energie statique avec eau liquide : | $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ |- | Energie statique sans nom : | $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ |- | Energie statique sèche : | $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br /> (= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) |} [[Category:Physique]] [[Category:Notes Techniques]] 308c960732bbcbb5a6dc0695939c4e04619033db Fichier:Mem partagee.jpg 6 42 76 2021-01-24T15:01:49Z Lfairhead 1 Schéma mémoire partagée wikitext text/x-wiki Schéma mémoire partagée 36ace6327bbb8e068971905ed1b433709837a387 Fichier:Mem distribuee.jpg 6 43 77 2021-01-24T15:04:43Z Lfairhead 1 Schéma mémoire distribuée wikitext text/x-wiki Schéma mémoire distribuée 4e46dd378c3da52934d261284aea1b9689e96b33 Fichier:Sortie install sh.jpg 6 44 78 2021-01-24T16:02:36Z Lfairhead 1 Copie d'écran sortie install.sh wikitext text/x-wiki Copie d'écran sortie install.sh 5a49d8f03d2f6d2ef031ed73945208435205aac4 Fichier:Modif init.jpg 6 45 79 2021-01-24T16:06:54Z Lfairhead 1 copie écran modification script init wikitext text/x-wiki copie écran modification script init 02fee6d539677e724b0789c2007152f56c790ac1 Fichier:Modif gcm.jpg 6 46 80 2021-01-24T16:11:54Z Lfairhead 1 copie écran modification gcm.sh wikitext text/x-wiki copie écran modification gcm.sh a609f19053fc552a3f1a964ac2ccc2f889a0aa50 Fichier:Sortie init.jpg 6 47 81 2021-01-24T16:17:30Z Lfairhead 1 copie d'écran sortie initial wikitext text/x-wiki copie d'écran sortie initial ead624aa14fad57714b4e1d461944cf04ede9630 Fichier:Run local.jpg 6 48 82 2021-01-24T16:20:17Z Lfairhead 1 copie d'écran run_local wikitext text/x-wiki copie d'écran run_local a0b9d261cf84b57135fcc9dabceba448503543e4 Fichier:Sortie run local.jpg 6 49 83 2021-01-24T16:22:28Z Lfairhead 1 copie d'écran sortie run_local wikitext text/x-wiki copie d'écran sortie run_local c176691561dfc65526c44c7bdc733f064bb59bb5 LMDZ en configuration parallèle (et un peu de descente d'échelle) 0 50 84 2021-01-24T16:26:06Z Lfairhead 1 Page créée avec « === Principe de la parallélisation === Le parallélisme permet d’effectuer des opérations en simultané et donc de réduire les temps de calcul. Il s’oppose à un... » wikitext text/x-wiki === Principe de la parallélisation === Le parallélisme permet d’effectuer des opérations en simultané et donc de réduire les temps de calcul. Il s’oppose à un fonctionnement séquentiel dans lequel les opérations sont réalisées les unes à la suite des autres. === Les 2 types de parallélisation === ==== Mémoire partagée ==== [[Fichier:Mem_partagee.jpg||Principe de la mémoire partagée]] Principe de la mémoire partagée: * Plusieurs processeurs travaillent sur une mémoire commune * Programmable par OpenMP Intérêt : prise en main facile, on n’a pas besoin de spécifier la distribution des données sur chaque processeur puisque tout le monde accède à l’ensemble des données. Il suffit seulement de définir les driectives du programme qui doivent être parallélisée (ce qui est déjà fait pour LMDZ). On peut voir ça comme une répartition des taches mais pas des ressources. ==== Mémoire distribuée ==== [[Fichier:Mem_distribuee.jpg]]. Principe de la mémoire distribuée: * Chaque processeur accède à un espace mémoire qui lui est propre mais peut communiquer des informations aux autres processeurs. <br /> Ex avec LMDZ : 2 processeurs travaillent respectivement sur un espace mémoire correspondant à l’hémisphère Nord et l’autre à l’hémisphère Sud, ils ont uniquement besoin de communiquer des informations à la frontière (Equateur) : mémoire distribuée. * Programmable avec MPI. * On peut voir ça comme un partage des taches et des ressources, les limites de performance résident dans le temps de communication des procésseurs entre eux. * Par la suite nous allons lancer une configuration hybride qui permet de tirer le maximum des deux répartitions de la mémoire. === Lancement d’une configuration hybride === ==== Création d’un repertoire pour notre configuration ==== mkdir LMDZ_para cd LMDZ_para ==== Gérer la mémoire et indiquer où se trouve la bibliothèque MPI ==== * La façon dont la mémoire doit être gérée est un sujet sensible et nous y reviendrons au moment où elle peut poser problème. * Il faut renseigner l’emplacement de la bibliothèque MPI, pour trouver son emplacement on peut utiliser une commande comme : locate mpi Une fois que le chemin est localisé : ulimit -s unlimited export LD_LIBRARY_PATH=/where/your/mpi/lib/is/lib:$LD_LIBRARY_PATH Exemple : export LD_LIBRARY_PATH=/usr/lib/openmpi/lib:$LD_LIBRARY_PATH ==== Installation de LMDZ parallèle ==== * On télécharge le modèle sur le site du LMD via wget. * On s’accorde ensuite le droit d’execution sur install_lmdz.sh avec la commande chmod * On compile le modèle en modèle parallèle (-parallel), avec un parallélisme hybride (mpi_omp), sur une grille de départ 48x36x39 pour le banc d’essai wget http://www.lmd.jussieu.fr/~lmdz/pub/install_lmdz.sh chmod +x install_lmdz.sh ./install_lmdz.sh -parallel mpi_omp -d 48x36x39 [[Fichier:Sortie_install_sh.jpg]]. La sortie si tout va bien Les messages surlignés en jaune sont des indicateurs du bon déroulement de notre installation, il est essentiel que le banc d’essai ait tourné et donc que le répertoire BENCH48x36x39 existe. ==== 3.4 Mise en place d’une configuration personelle ==== On lance les commandes suivantes pour récupérer les fichiers nécessaires à la mise en place d’une configuration (voir: mandatory tutorial sur [[https://lmdz.lmd.jussieu.fr/utilisateurs/formation/2019]] pour plus d’informations) : wget http://www.lmd.jussieu.fr/~lmdz/pub/Training/tutorial.tar tar -xf tutorial.tar cd TUTORIAL Cette commande engendre la création d’un répertoire TUTORIAL dans lequel nous allons mettre en place une configuration personnelle. Dans cet exemple nous allons changer le nombre de points de grilles et passer de 48x36x39 à 72x36x39. NB: le nombre de points de grilles selon x doit etre un multiple de 8 pour des raisons de filtrage. On lance gedit init.sh et on modifie la valeur surligné en jaune. On peut remarquer qu’on tourne bien en configuration parallèle (via le parallel=1) mais aussi sans ORCHIDEE avec un modèle de sol simplifié (via le veget=0). [[Fichier:Modif_init.jpg]] Modifions la grille En changeant le pas de grille nous avons doublé la résolution selon x. Afin de nous assurer que nous respectons toujours le critère CFL nous allons doubler le nombre de pas de temps par jour par rapport à la valeur initiale du tutoriel qui est valable pour la résolution de base. Pour cela on lance : cd DEF gedit gcm.def Cf. figure [[Fichier:Modif_gcm.jpg]]. Modifions le pas de temps Si tout se passe bien init.sh va lancer la création de plusieurs répertoires : * INITIAL : contient tous les fichiers nécessaires à l’execution du modèle comme limit.nc, start.nc, startphy.nc qui viennent d’être créés et qui sont respectivement les conditions aux limites, l’état initial de la dynamique et l’état initial de la physique. On peut également y trouver notre grille dans grilles_gcm.nc qu’on peut visualiser via Ferret : use grilles_gcm.nc newline let rel=if (abs(grille_s-1) gt 0.5) then phis shade/pal=land_sea_values rel ; go land let deep=if (rel lt 0.1) then rel shade/pal=blue/o deep * SIMU1: un répertoire pour lancer une simulation * PROD0 : un répertoire très ressemblant à SIMU1 mais muni d’outils qui permettent de gérer automatiquement les conditions initiales quand on veut prolonger une simulation (enchaine.sh) Cf. figure [[Fichier:Sortie_init.jpg]]. Sortie de init.sh si tout va bien ==== 3.5 Execution via run_local.sh ==== A ce stade tout est près pour l’execution de notre simulation. Nous allons le faire via run_local.sh qui encapsule les commandes qu’on doit préciser pour faire tourner le modèle en prallélisme hybride. En OpenMP il faut préciser le nombre de threads (équivalent au nombre de taches exécutées en simultanés) l’espace mémoire qu’on leur accorde. En MPI il suffit de préciser le nombre de subdivions des taches. Il faudrait donc écrire à chaque fois quelque chose comme : export OMP_STACKSIZE=200M export OMP_NUM_THREADS=2 mpirun -np 3 ./gcm.e Si on ouvre run_local.sh, on se rend compte que ces commandes sont dans le script et qu’il suffit de préciser leur valeur en argument de la fonction. [[Fichier:Run_local.jpg]]. Le contenu de run_local.sh La suite du script permet de rassembler les parties mémoire gérée de façon distribuée via la fonction rebuild. On peut donc lancer l’éxecution en tapant : ./run_local.sh 2 2 gcm.e Remarque : on peut vérifier que la parallélisation réduit les temps de calcul en remplaçant les 2 par des 1, ce qui revient à ne pas subdiviser les taches. [[Fichier:Sortie_run_local.jpg]]. Sortie de run_local.sh si tout va bien On a dit au début que la gestion de la mémoire était un sujet sensible et il est possible d’obtenir des erreurs à l’éxecution liée à la façon dont on gère la mémoire. * Premier type d’erreur : mpirun noticed that process rank 0 with PID 0 on node newhydra exited on signal 11 (Segmentation fault). * Deuxième type d’erreur : mpirun noticed that process rank 1 with PID 0 on node newhydra exited on signal 11 (Segmentation fault). La façon de gérer ces erreurs n’est pas très claire, mais afin de les résoudre on peut essayer : * fermer la session et relancer (la commande ulimit -s unlimited du début est ainsi oublié) * ulimit -s 20000 : on peut essayer de donner une valeur en dur (par forcément 20 000) * ulimit -Ss unlimited [[Category:HowTo]] [[Category:parallel]] 95157cf65e088c345d0f8093ed8d8631a7374da9 85 84 2021-01-24T16:28:05Z Lfairhead 1 wikitext text/x-wiki === Principe de la parallélisation === Le parallélisme permet d’effectuer des opérations en simultané et donc de réduire les temps de calcul. Il s’oppose à un fonctionnement séquentiel dans lequel les opérations sont réalisées les unes à la suite des autres. === Les 2 types de parallélisation === ==== Mémoire partagée ==== [[Fichier:Mem_partagee.jpg||Principe de la mémoire partagée]] Principe de la mémoire partagée: * Plusieurs processeurs travaillent sur une mémoire commune * Programmable par OpenMP Intérêt : prise en main facile, on n’a pas besoin de spécifier la distribution des données sur chaque processeur puisque tout le monde accède à l’ensemble des données. Il suffit seulement de définir les driectives du programme qui doivent être parallélisée (ce qui est déjà fait pour LMDZ). On peut voir ça comme une répartition des taches mais pas des ressources. ==== Mémoire distribuée ==== [[Fichier:Mem_distribuee.jpg]]. Principe de la mémoire distribuée: * Chaque processeur accède à un espace mémoire qui lui est propre mais peut communiquer des informations aux autres processeurs. <br /> Ex avec LMDZ : 2 processeurs travaillent respectivement sur un espace mémoire correspondant à l’hémisphère Nord et l’autre à l’hémisphère Sud, ils ont uniquement besoin de communiquer des informations à la frontière (Equateur) : mémoire distribuée. * Programmable avec MPI. * On peut voir ça comme un partage des taches et des ressources, les limites de performance résident dans le temps de communication des procésseurs entre eux. * Par la suite nous allons lancer une configuration hybride qui permet de tirer le maximum des deux répartitions de la mémoire. === Lancement d’une configuration hybride === ==== Création d’un repertoire pour notre configuration ==== mkdir LMDZ_para cd LMDZ_para ==== Gérer la mémoire et indiquer où se trouve la bibliothèque MPI ==== * La façon dont la mémoire doit être gérée est un sujet sensible et nous y reviendrons au moment où elle peut poser problème. * Il faut renseigner l’emplacement de la bibliothèque MPI, pour trouver son emplacement on peut utiliser une commande comme : locate mpi Une fois que le chemin est localisé : ulimit -s unlimited export LD_LIBRARY_PATH=/where/your/mpi/lib/is/lib:$LD_LIBRARY_PATH Exemple : export LD_LIBRARY_PATH=/usr/lib/openmpi/lib:$LD_LIBRARY_PATH ==== Installation de LMDZ parallèle ==== * On télécharge le modèle sur le site du LMD via wget. * On s’accorde ensuite le droit d’execution sur install_lmdz.sh avec la commande chmod * On compile le modèle en modèle parallèle (-parallel), avec un parallélisme hybride (mpi_omp), sur une grille de départ 48x36x39 pour le banc d’essai wget http://www.lmd.jussieu.fr/~lmdz/pub/install_lmdz.sh chmod +x install_lmdz.sh ./install_lmdz.sh -parallel mpi_omp -d 48x36x39 [[Fichier:Sortie_install_sh.jpg]]. La sortie si tout va bien Les messages surlignés en jaune sont des indicateurs du bon déroulement de notre installation, il est essentiel que le banc d’essai ait tourné et donc que le répertoire BENCH48x36x39 existe. ==== 3.4 Mise en place d’une configuration personelle ==== On lance les commandes suivantes pour récupérer les fichiers nécessaires à la mise en place d’une configuration (voir: mandatory tutorial sur [[https://lmdz.lmd.jussieu.fr/utilisateurs/formation/2019]] pour plus d’informations) : wget http://www.lmd.jussieu.fr/~lmdz/pub/Training/tutorial.tar tar -xf tutorial.tar cd TUTORIAL Cette commande engendre la création d’un répertoire TUTORIAL dans lequel nous allons mettre en place une configuration personnelle. Dans cet exemple nous allons changer le nombre de points de grilles et passer de 48x36x39 à 72x36x39. NB: le nombre de points de grilles selon x doit etre un multiple de 8 pour des raisons de filtrage. On lance gedit init.sh et on modifie la valeur surligné en jaune. On peut remarquer qu’on tourne bien en configuration parallèle (via le parallel=1) mais aussi sans ORCHIDEE avec un modèle de sol simplifié (via le veget=0). [[Fichier:Modif_init.jpg]] Modifions la grille En changeant le pas de grille nous avons doublé la résolution selon x. Afin de nous assurer que nous respectons toujours le critère CFL nous allons doubler le nombre de pas de temps par jour par rapport à la valeur initiale du tutoriel qui est valable pour la résolution de base. Pour cela on lance : cd DEF gedit gcm.def [[Fichier:Modif_gcm.jpg]]. Modifions le pas de temps Si tout se passe bien init.sh va lancer la création de plusieurs répertoires : * INITIAL : contient tous les fichiers nécessaires à l’execution du modèle comme limit.nc, start.nc, startphy.nc qui viennent d’être créés et qui sont respectivement les conditions aux limites, l’état initial de la dynamique et l’état initial de la physique. On peut également y trouver notre grille dans grilles_gcm.nc qu’on peut visualiser via Ferret : use grilles_gcm.nc newline let rel=if (abs(grille_s-1) gt 0.5) then phis shade/pal=land_sea_values rel ; go land let deep=if (rel lt 0.1) then rel shade/pal=blue/o deep * SIMU1: un répertoire pour lancer une simulation * PROD0 : un répertoire très ressemblant à SIMU1 mais muni d’outils qui permettent de gérer automatiquement les conditions initiales quand on veut prolonger une simulation (enchaine.sh) [[Fichier:Sortie_init.jpg]]. Sortie de init.sh si tout va bien ==== 3.5 Execution via run_local.sh ==== A ce stade tout est près pour l’execution de notre simulation. Nous allons le faire via run_local.sh qui encapsule les commandes qu’on doit préciser pour faire tourner le modèle en prallélisme hybride. En OpenMP il faut préciser le nombre de threads (équivalent au nombre de taches exécutées en simultanés) l’espace mémoire qu’on leur accorde. En MPI il suffit de préciser le nombre de subdivions des taches. Il faudrait donc écrire à chaque fois quelque chose comme : export OMP_STACKSIZE=200M export OMP_NUM_THREADS=2 mpirun -np 3 ./gcm.e Si on ouvre run_local.sh, on se rend compte que ces commandes sont dans le script et qu’il suffit de préciser leur valeur en argument de la fonction. [[Fichier:Run_local.jpg]]. Le contenu de run_local.sh La suite du script permet de rassembler les parties mémoire gérée de façon distribuée via la fonction rebuild. On peut donc lancer l’éxecution en tapant : ./run_local.sh 2 2 gcm.e Remarque : on peut vérifier que la parallélisation réduit les temps de calcul en remplaçant les 2 par des 1, ce qui revient à ne pas subdiviser les taches. [[Fichier:Sortie_run_local.jpg]]. Sortie de run_local.sh si tout va bien On a dit au début que la gestion de la mémoire était un sujet sensible et il est possible d’obtenir des erreurs à l’éxecution liée à la façon dont on gère la mémoire. * Premier type d’erreur : mpirun noticed that process rank 0 with PID 0 on node newhydra exited on signal 11 (Segmentation fault). * Deuxième type d’erreur : mpirun noticed that process rank 1 with PID 0 on node newhydra exited on signal 11 (Segmentation fault). La façon de gérer ces erreurs n’est pas très claire, mais afin de les résoudre on peut essayer : * fermer la session et relancer (la commande ulimit -s unlimited du début est ainsi oublié) * ulimit -s 20000 : on peut essayer de donner une valeur en dur (par forcément 20 000) * ulimit -Ss unlimited [[Category:HowTo]] [[Category:parallel]] 6a060a73b751d9af35837a9f2cab730ead14d616 Création des fichiers de guidage et adaptation de l'exécution 0 51 86 2021-01-24T16:55:20Z Lfairhead 1 Page créée avec « == Créer les fichiers de guidages == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 =>... » wikitext text/x-wiki == Créer les fichiers de guidages == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/CONFIG/LMDZOR/branches/LMDZOR_v4/CREATE/SCRIPT 3 => Recuperer les fichiers ERAI non-interpolé 4 => Interpoler avec interp_from_era.ksh. D'abord adapter qq variables en tete du script : gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" : les variables a interpoler outdir= repertoire de resultats first_year=2011 last_year=2011 rundir= repertoire temporaire ./interp_from_era.ksh == Adapter le run == 5 => Crée le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y [[Category:guidage]] [[Category:HowTo]] guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activé.<br/> Temps de relaxation, pour une grille regulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'interieure de la zoom et tau_min à l'exterieur de la zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort..<br/> 6 => Ajouter en tete de run.def la prise en compte de la fichier guide.def : INCLUDEDEF=guide.def 7 => Copier les fichier interpolé u_201101_erai.nc en u.nc et v_201101_erai.nc v.nc dans le repertoire où le modèle sera lancer : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l'execution ./gcm.e > out_guide 2>&1 de3bb9d59941c3746e19b7ee399c421bf8aae3da Conservation de l'eau 0 52 87 2021-01-24T16:58:05Z Lfairhead 1 Page créée avec « Comme la variable qsol est incrémentée dans pbl_surface, c'est-à-dire au début de la physique, elle est incrémentée avec la précipitation du pas de temps précéden... » wikitext text/x-wiki Comme la variable qsol est incrémentée dans pbl_surface, c'est-à-dire au début de la physique, elle est incrémentée avec la précipitation du pas de temps précédent (mais avec l'évaporation du pas de temps actuel). Donc, pour tester la conservation, il faut soit faire le graphe de dtime*precip + qsol + {intégrale verticale de ovap+ocond}, soit faire le graphe de {cumul de precip jusqu'à t} - {cumul de evap jusqu'à t} + {intégrale verticale de (ovap+ocond) à t}. 2b72e8e95f2d50e3db7079c3055576a2178354c5 Gustiness 0 53 88 2021-01-24T17:07:59Z Lfairhead 1 Page créée avec « Les variables u, u10m et taux du modèle sont des moyennes ne comprenant pas la gustiness. Mais elles en dépendent bien sûr via la modification du coefficient d'échange... » wikitext text/x-wiki Les variables u, u10m et taux du modèle sont des moyennes ne comprenant pas la gustiness. Mais elles en dépendent bien sûr via la modification du coefficient d'échange. wind10m est le module du vent grande échelle. $$\sqrt{wind10m^2 + gusts}$$ est le module moyen tenant compte de la gustiness. e9c81722ccd2ad439ae02f17a5c9e6e92affe1a3 Options d'évaporation dans fisrtilp 0 54 89 2021-01-24T17:21:51Z Lfairhead 1 Page créée avec « Quand la pluie tombe dans la colonne atmosphérique, on en ré-évapore une partie. Cette ré-évaporation est en $$A (1 - RH) P^1/2$$ où $$RH$$ est l'humidité relativ... » wikitext text/x-wiki Quand la pluie tombe dans la colonne atmosphérique, on en ré-évapore une partie. Cette ré-évaporation est en $$A (1 - RH) P^1/2$$ où $$RH$$ est l'humidité relative $$q/qsat$$, $$P$$ la précipitation et $$A$$ est un paramètre ajustable. On peut appliquer ça sur toute la maille. Mais ce faisant on ne tient pas compte du fait que la pluie ne tombe en fait que sur une fraction de la maille : sous les nuages. Cet aspect était pris en compte au départ dans le modèle en calculant une évaporation maximum sous le nuage : $$neb (qsat - q)$$. Donc on évaporait sur toute la maille jusqu'à saturer la partie sous nuageuse. Mais cela marchait en considérant la fraction nuageuse dans la maille immédiatement au dessus. Ce faisant, dès qu'on était deux couches sous le nuage, on était censé majorer par 0 (qsat - q), donc ne plus évaporer. Pour que ce soit moins extrême, l'évaporation était en fait bornée par $$ max(0.001,neb) (qsat - q)$$, et ce quelque soit la fraction des nuages au dessus. Le premier changement (iflag_evap_prec : 1 -> 2) a consisté à utiliser dans la formule du max un max de nébulosité sur les couches au dessus. Plus précisément un max sur les couches connexes au-dessus pour lesquelles on a soit des nuages soit un flux de précipitation non nul. Le second changement (iflag_evap_prec=3) consiste à utiliser cette fraction "sous nuageuse", nebP dans le calcul de l'évaporation lui-même : $$ nebP (1 - RH) (P/nebP)^(1/2)$$. Sachant qu'il faudrait revenir beaucoup plus sérieusement sur ce qui a conduit à cette formulation très empirique, utilisée par beaucoup. Le but principal de ce changement était de renforcer la pluie sous les cumulus d'alizés (peu couvrants) par rapport aux stratocumulus (couvrant à 100%). Sur continents, cela favorise sans doute la pluie au détriment des nuages (plus forte efficacité de précipitation effective des nuages). [[Category:physique]] 625eb50bd077f5a67ad08438ece4ec120a176000 Fichier:Flot des variables de temps.png 6 55 90 2021-01-24T17:25:54Z Lfairhead 1 Flot_des_variables_de_temps wikitext text/x-wiki Flot_des_variables_de_temps a4c2c3da72edb5ed5dc8d81c4e34f008a6d06ae8 Flot des variables de temps 0 56 91 2021-01-24T17:33:28Z Lfairhead 1 Page créée avec « [[Fichier:Flot_des_variables_de_temps.png]] ''Légende'' : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et a... » wikitext text/x-wiki [[Fichier:Flot_des_variables_de_temps.png]] ''Légende'' : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments. Cf. [[Diagramme_de_flot_de_données| légende plus détaillée]]. Fichier source LibreOffice pour le graphique. jd_ref est un jour julien. etat0_netcdf met dayref dans la variable controle(30) (indice Fortran) de start.nc. Après, à chaque simulation enchaînée, sans remise à zéro de la date, day_ini est rempli avec controle(30) de start.nc, il lui est ajouté nday pour donner day_end, qui est écrit dans controle(30) de restart.nc. Donc, si on écarte le cas d’une remise à zéro de la date, (annee_ref,day_ref) est le premier jour de la première simulation, sert comme origine des temps dans les fichiers d’historiques, et ne change pas lorsqu’on enchaîne les simulations. (annee_ref,day_ini) est le premier jour de la simulation en cours et change à chaque simulation enchaînée. Par exemple, pour une première simulation de 2 mois à partir du 1erdécembre 1980, calendrier de 360 jours, on a : annee_ref = 1980, day_ref = 331, nday = 60, day_ini = 331. Pour une deuxième simulation enchaînée sans remise à zéro de la date, on a : annee_ref = 1980, day_ref = 331, day_ini = 391. 2fb2853e719fc2b4c45f41b831254f1c59fc3c23 Fichier:Esesi.png 6 57 92 2021-01-24T17:39:41Z Lfairhead 1 Formation de glace et température wikitext text/x-wiki Formation de glace et température 1d45bd3a516ed7e6cf783ca7adddcf1ab4306e55 Formation de glace et température 0 58 93 2021-01-24T22:05:53Z Lfairhead 1 Page créée avec « == Calcul de l'effet de la formation de glace sur la température de la particule soulevée adiabatiquement == == JYG & AJ Sep 27, 2018 == Cette note a pour but de déta... » wikitext text/x-wiki == Calcul de l'effet de la formation de glace sur la température de la particule soulevée adiabatiquement == == JYG & AJ Sep 27, 2018 == Cette note a pour but de détailler les calculs permettant de déterminer la température d'une particule soulévée adiabatiquement lorsqu'il y a formation de glace. Elle se place dans la suite du travail d'Arnaud Jam et en particulier de son mémoire de 1998. Plus précisément, il s'agit de (re-)construire la procédure de calcul à mettre dans ündilute2" (ou dans "tlift" pour les anciennes versions) après l'appel de la procédure ïcefrac". L'idée générale dans tous ces calculs est que les particules d'air ascendant sont loin de l'équilibre et que leur phase condensée peut, à un même niveau, présenter une fraction englacée allant de 0% à 100%. La première phase du calcul ayant consisté à déterminer les caractéristiques des particules sans glace il s'agit ici de calculer la température des particules comportant la fraction englacée déterminée par la procédure ïcefrac". On considère donc une particule de contenu en eau total $$q_t$$, dont on connait la température $$T_{p,ni}$$ et l'humidité massique $$q_{p,ni}$$ en l'absence de formation de glace (suffixe "ni" pour "no ice") et le contenu massique en glace, $$q_i$$. On se donne aussi la température $$T$$ de l'environnement au même niveau (cette température est supposée proche de la température de la particule avec glace). On utilise les chaleurs latentes à la température $$T$$ : {| | vaporisation | $$L_v = L_{v0} + (C_{pv}−C_l)(T−T_0)$$ |- | sublimation | $$ Ls = L_{s0} + (C_{pv}−C_i)(T−T_0)$$ |- | fusion | $$ L_f = L_s − L_v = L_{s0} − L_{v0} + (C_l−C_i)(T−T0) $$ |} (1) où $$L_{v0}$$ et $$L_{s0}$$ sont les chaleurs latentes de vaporisation et de sublimation au point triple $$T_0$$ de l'eau ($$T_0$$ = 273.15 K). Les pressions de vapeur saturante, $$e_s$$ sur l'eau liquide et $$e_{si}$$ sur la glace sont données par les formules : $$ e_s(T) = 6.112 exp[17.67 \frac{T−T_0} {T−29.65} ]$$ $$e_{si}(T)= exp[23.33086 − \frac{6111.72784} {T} + 0.15215 log(T)] $$ (2) Les graphes de ces fonctions sont portés sur la figure. Ils se croisent évidemment au point triple (T = 273.15 K, $$e_s$$ = $$e_{si}$$ = 6.112 hPa). [[Fichier:Esesi.png]] Figure 1: Graphes des fonctions $$e_s$$ et $$e_{si}$$. Avec $$e_s$$ et $$e_{si}$$ on peut écrire les humidités massiques à saturation : $$q_{sat} = \frac{ϵe_s} {p − (1−ϵ)e_s} ≅ e_s \frac{ϵ} {p}$$ et $$ q_{sat,i} = \frac{ϵe_{si}} {p − (1−ϵ)e_{si}}≅ e_{si} \frac {ϵ}{p}$$ où $$ ϵ = R_d/R_v ≅ 0.62 $$ (noter que $$ q_{p,ni} = q_{sat}(T_{p,ni)})$$. L'application de la formule de Clausius-Clapeyron donne en outre : $$ \frac{d q_{sat,i}}{d T}(T) = \frac {L_s q_{sat,i}}{R_v T^2}$$ Les énergies statiques s'écrivent : $$h_{p,ni} = [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) + gz $$ pour la particule sans glace et $$ h_p= [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(T_p) − L_f q_i + gz $$ pour la particule avec glace. En écrivant que l'énergie statique est conservée lors de la formation de glace, on obtient : $$ [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) = [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(Tp) − L_f q_i $$ ce qui donne l'équation à résoudre en $$T_p$$ : $$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f q_i$$ (3) === Résolution === On résoud l´équation par la méthode de Newton : on construit une suite $$T_j$$ partant de $$T_1 = ~T$$ et convergeant vers $$T_p$$ ; on passe de $$T_j$$ a $$T_{j+1}$$ par l'équation obtenue en linéarisant l'équation (3) : $$ [(1−q_t)C_{pd}+q_tC_l] (T_{j+1} − T_{p,ni}) = L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)− \frac{d q_{sat,i}} {d T} (T_j)(T_{j+1}−T_j) ] + L_f q_i$$ (4) Ce qui donne : {| | $$ [(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}} {d T}(T_j)] (T_{j+1}−T_j) $$ | $$ =[(1−q_t)C_{pd}+q-tC-l](T-{p,ni} − T_j) $$ |- | | $$ + L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)] $$ |- | | $$ + L_f q_i $$ |} (5) soit : $$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{sat}(T_{p,ni})−q_{sat,i}(T_j)] + L_f q_i} {(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}}{ d T} (T_j)} $$ (6) et, finalement, en utilisant Clausius-Clapeyron : $$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{p,ni}−q_{sat,i}(T_j)] + L_f qi} {(1−q_t)C_{pd}+q_tC_l +\frac {L_v L_s q_{sat,i}(T_j)}{ R_v T^2}} $$ (7) === Dans le code === La température de la particule avec glace $$T_p$$ ainsi que les approximations successives $$T_j$$ sont notées $$tp(i,k)$$. Les caractéristiques de la particule sans glace sont notées $$tg$$ pour $$T_{p,ni}$$ et $$qg$$ pour $$q_{p,ni}$$. L'eau totale est notées $$qnk(i)$$. Enfin la température $$T$$ de l'environnement est notée $$t(i,k)$$. Tout cela donne la boucle : alv=lv0-clmcpv*(t(i,k)-273.15) alf=lf0+clmci*(t(i,k)-273.15) als=alf+alv tg=tp(i,k) ! On garde dans tg la temperature sans glace tp(i,k) = t(i,k) ! L'iteration part de la temperature de l'environnement do j=1,4 esi=exp(23.33086-(6111.72784/tp(i,k)) : +0.15215*log(tp(i,k))) qsat_new=eps*esi/(p(i,k)-esi*(1.-eps)) snew=cpd*(1.-qnk(i))+cl*qnk(i)+alv*als*qsat_new/ : (rrv*tp(i,k)*tp(i,k)) snew=1./snew tp(i,k)=tp(i,k)+ : ( (cpd*(1.-qnk(i))+cl*qnk(i))*(tg-tp(i,k)) + : alv*(qg-qsat_new) + alf*qi(i,k) )*snew enddo L'expérience montre que l'itération converge en moins de quatre coups à mieux que 0.01 K. === Remarques === * Les formules donnant les pressions de vapeur saturante devraient s'écrire de façon plus physique : $$ e_{s0} $$ = 6.112 hPa Pression de vapeur saturante au point triple $$e_s(T) = e_{s0} exp[17.67 \frac{ T−T_0}{T−29.65}] $$ $$ e_{si}(T) = e_{s0} exp[−6111.72784(\frac {1}{T} − \frac{1}{T0}) + 0.15215 log(\frac{T}{T0} )]$$ (8) Le fait que l'itération converge prouve que l'on résoud bien l'équation (3). La question est alors de savoir si l'équation (3) est bien correcte. Les doutes portent sur l'écriture de l'énergie statique (dans le rapport d'Arnaud en 1998 il y a un un signe + devant le terme $$L_f q_i$$) et sur la dépendance en température de $$L_f$$ (signe contraire pour Arnaud). Il y a aussi un doute sur l'application de la relation de Clausius-Clapeyron à la sublimation mais, comme cela ne sert qu'à la résolution de l'équation (3), c'est sans importance. La procédure Icefrac détermine un contenu total en glace. Comme ce contenu est déterminé avant le calcul de la température, on risque d'avoir un contenu en glace supérieur au contenu condensé. Il serait plus correct que Icefrac détermine la proportion de condensat qui est sous forme glace, puis qu'on résolve l'équation en température en tenant compte de la variation du contenu total en glace. En désignant par fi la fraction de condansat qui est sous forme glace, l'équation (3) deviendrait : $$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f f_i (q_t − q_{sat,i}(T_p))$$ (9) [[Category:notes techniques]] aeeba85d0e2a4b2e4494a6547f0525358512e1a0 100 93 2021-01-24T22:30:15Z Lfairhead 1 /* JYG & AJ Sep 27, 2018 */ wikitext text/x-wiki == Calcul de l'effet de la formation de glace sur la température de la particule soulevée adiabatiquement == == JYG & AJ Sep 27, 2018 == Cette note a pour but de détailler les calculs permettant de déterminer la température d'une particule soulévée adiabatiquement lorsqu'il y a formation de glace. Elle se place dans la suite du travail d'Arnaud Jam et en particulier de son mémoire de 1998. Plus précisément, il s'agit de (re-)construire la procédure de calcul à mettre dans ündilute2" (ou dans "tlift" pour les anciennes versions) après l'appel de la procédure ïcefrac". L'idée générale dans tous ces calculs est que les particules d'air ascendant sont loin de l'équilibre et que leur phase condensée peut, à un même niveau, présenter une fraction englacée allant de 0% à 100%. La première phase du calcul ayant consisté à déterminer les caractéristiques des particules sans glace il s'agit ici de calculer la température des particules comportant la fraction englacée déterminée par la procédure ïcefrac". On considère donc une particule de contenu en eau total $$q_t$$, dont on connait la température $$T_{p,ni}$$ et l'humidité massique $$q_{p,ni}$$ en l'absence de formation de glace (suffixe "ni" pour "no ice") et le contenu massique en glace, $$q_i$$. On se donne aussi la température $$T$$ de l'environnement au même niveau (cette température est supposée proche de la température de la particule avec glace). On utilise les chaleurs latentes à la température $$T$$ : {| | vaporisation | $$L_v = L_{v0} + (C_{pv}−C_l)(T−T_0)$$ |- | sublimation | $$ Ls = L_{s0} + (C_{pv}−C_i)(T−T_0)$$ |- | fusion | $$ L_f = L_s − L_v = L_{s0} − L_{v0} + (C_l−C_i)(T−T0) $$ |} (1) où $$L_{v0}$$ et $$L_{s0}$$ sont les chaleurs latentes de vaporisation et de sublimation au point triple $$T_0$$ de l'eau ($$T_0$$ = 273.15 K). Les pressions de vapeur saturante, $$e_s$$ sur l'eau liquide et $$e_{si}$$ sur la glace sont données par les formules : $$ e_s(T) = 6.112 exp[17.67 \frac{T−T_0} {T−29.65} ]$$ $$e_{si}(T)= exp[23.33086 − \frac{6111.72784} {T} + 0.15215 log(T)] $$ (2) Les graphes de ces fonctions sont portés sur la figure. Ils se croisent évidemment au point triple (T = 273.15 K, $$e_s$$ = $$e_{si}$$ = 6.112 hPa). [[Fichier:Esesi.png]] Figure 1: Graphes des fonctions $$e_s$$ et $$e_{si}$$. Avec $$e_s$$ et $$e_{si}$$ on peut écrire les humidités massiques à saturation : $$q_{sat} = \frac{ϵe_s} {p − (1−ϵ)e_s} ≅ e_s \frac{ϵ} {p}$$ et $$ q_{sat,i} = \frac{ϵe_{si}} {p − (1−ϵ)e_{si}}≅ e_{si} \frac {ϵ}{p}$$ où $$ ϵ = R_d/R_v ≅ 0.62 $$ (noter que $$ q_{p,ni} = q_{sat}(T_{p,ni)})$$. L'application de la formule de Clausius-Clapeyron donne en outre : $$ \frac{d q_{sat,i}}{d T}(T) = \frac {L_s q_{sat,i}}{R_v T^2}$$ Les énergies statiques s'écrivent : $$h_{p,ni} = [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) + gz $$ pour la particule sans glace et $$ h_p= [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(T_p) − L_f q_i + gz $$ pour la particule avec glace. En écrivant que l'énergie statique est conservée lors de la formation de glace, on obtient : $$ [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) = [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(Tp) − L_f q_i $$ ce qui donne l'équation à résoudre en $$T_p$$ : $$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f q_i$$ (3) === Résolution === On résoud l´équation par la méthode de Newton : on construit une suite $$T_j$$ partant de $$T_1 = ~T$$ et convergeant vers $$T_p$$ ; on passe de $$T_j$$ a $$T_{j+1}$$ par l'équation obtenue en linéarisant l'équation (3) : $$ [(1−q_t)C_{pd}+q_tC_l] (T_{j+1} − T_{p,ni}) = L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)− \frac{d q_{sat,i}} {d T} (T_j)(T_{j+1}−T_j) ] + L_f q_i$$ (4) Ce qui donne : {| | $$ [(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}} {d T}(T_j)] (T_{j+1}−T_j) $$ | $$ =[(1−q_t)C_{pd}+q-tC-l](T-{p,ni} − T_j) $$ |- | | $$ + L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)] $$ |- | | $$ + L_f q_i $$ |} (5) soit : $$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{sat}(T_{p,ni})−q_{sat,i}(T_j)] + L_f q_i} {(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}}{ d T} (T_j)} $$ (6) et, finalement, en utilisant Clausius-Clapeyron : $$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{p,ni}−q_{sat,i}(T_j)] + L_f qi} {(1−q_t)C_{pd}+q_tC_l +\frac {L_v L_s q_{sat,i}(T_j)}{ R_v T^2}} $$ (7) === Dans le code === La température de la particule avec glace $$T_p$$ ainsi que les approximations successives $$T_j$$ sont notées $$tp(i,k)$$. Les caractéristiques de la particule sans glace sont notées $$tg$$ pour $$T_{p,ni}$$ et $$qg$$ pour $$q_{p,ni}$$. L'eau totale est notées $$qnk(i)$$. Enfin la température $$T$$ de l'environnement est notée $$t(i,k)$$. Tout cela donne la boucle : alv=lv0-clmcpv*(t(i,k)-273.15) alf=lf0+clmci*(t(i,k)-273.15) als=alf+alv tg=tp(i,k) ! On garde dans tg la temperature sans glace tp(i,k) = t(i,k) ! L'iteration part de la temperature de l'environnement do j=1,4 esi=exp(23.33086-(6111.72784/tp(i,k)) : +0.15215*log(tp(i,k))) qsat_new=eps*esi/(p(i,k)-esi*(1.-eps)) snew=cpd*(1.-qnk(i))+cl*qnk(i)+alv*als*qsat_new/ : (rrv*tp(i,k)*tp(i,k)) snew=1./snew tp(i,k)=tp(i,k)+ : ( (cpd*(1.-qnk(i))+cl*qnk(i))*(tg-tp(i,k)) + : alv*(qg-qsat_new) + alf*qi(i,k) )*snew enddo L'expérience montre que l'itération converge en moins de quatre coups à mieux que 0.01 K. === Remarques === * Les formules donnant les pressions de vapeur saturante devraient s'écrire de façon plus physique : $$ e_{s0} $$ = 6.112 hPa Pression de vapeur saturante au point triple $$e_s(T) = e_{s0} exp[17.67 \frac{ T−T_0}{T−29.65}] $$ $$ e_{si}(T) = e_{s0} exp[−6111.72784(\frac {1}{T} − \frac{1}{T0}) + 0.15215 log(\frac{T}{T0} )]$$ (8) Le fait que l'itération converge prouve que l'on résoud bien l'équation (3). La question est alors de savoir si l'équation (3) est bien correcte. Les doutes portent sur l'écriture de l'énergie statique (dans le rapport d'Arnaud en 1998 il y a un un signe + devant le terme $$L_f q_i$$) et sur la dépendance en température de $$L_f$$ (signe contraire pour Arnaud). Il y a aussi un doute sur l'application de la relation de Clausius-Clapeyron à la sublimation mais, comme cela ne sert qu'à la résolution de l'équation (3), c'est sans importance. La procédure Icefrac détermine un contenu total en glace. Comme ce contenu est déterminé avant le calcul de la température, on risque d'avoir un contenu en glace supérieur au contenu condensé. Il serait plus correct que Icefrac détermine la proportion de condensat qui est sous forme glace, puis qu'on résolve l'équation en température en tenant compte de la variation du contenu total en glace. En désignant par fi la fraction de condansat qui est sous forme glace, l'équation (3) deviendrait : $$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f f_i (q_t − q_{sat,i}(T_p))$$ (9) [[Category:Notes Techniques]] 670d8a958ead63869edb6527a741c583296428c2 Accueil 0 1 94 32 2021-01-24T22:09:50Z Lfairhead 1 /* LMDZPedia */ wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|700px]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 586ac00a1274aa470651873f604940e69398a00b 95 94 2021-01-24T22:10:40Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|600px]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] c5907fd3823e45dbe4a6d854d77bdf453df59581 96 95 2021-01-24T22:11:05Z Lfairhead 1 /* LMDZPedia */ wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|600px]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] e2fc4b14264a6e7dffef5416d5f6f341b29241ee 97 96 2021-01-24T22:11:37Z Lfairhead 1 /* Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ */ wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|600px]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 757caea68536e26b5ef64b532de6e20416473a23 102 97 2021-02-01T10:30:08Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|600px|center]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 6f71c9a24b6d232db3d04de5d1a7967dd7cbfe99 105 102 2021-09-13T13:25:33Z Lfairhead 1 /* LMDZPedia */ wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|300px|center]] ''The ultimate LMDZ knowledge database'' [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] be63db3d0f9ac7682e71a01761c131d1641e5adf HowTo: Print alert messages 0 59 108 2021-09-17T11:03:16Z Lfairhead 1 Page créée avec « Routine 'prt_alerte' has been added to module phy_common/print_control_mod.F90 to enable developpers to print out informative messages on the first pass through physics an... » wikitext text/x-wiki Routine 'prt_alerte' has been added to module phy_common/print_control_mod.F90 to enable developpers to print out informative messages on the first pass through physics and from the master process only. This can be used to remind oneself of potential problems or further enhancements. Messages can be differentiated by a 'priority' code 0/1/2 (corresponding to GREEN/ORANGE/RED alerts) By default, the messages are output in a file called ALERTES.txt but changing the unit number to 6 in the print_control_mod.F90 file allows you to print out your messages to the screen. To use you simply need to: * have this USE statement at the start of your routine: USE print_control_mod, ONLY: prt_level, lunout, call_alert, prt_alerte * ensure that the modname variable is defined and contains the name of your routine then you just need to add the following lines in your routine wherever you want to ouput your message (preferably not in a do loop) message='your informative message' IF (call_alert) CALL prt_alerte(message,modname,CODE) where message is the message to print out modname is the routine name CODE is an integer representing your priority code (0/1/2) and you should get messages of the form ALERTE ROUGE cva_driver! ym missing init, need to have a look by developpers ALERTE VERTE orosetup_strato! ym correction en attendant mieux in your output file. a99b051957914ff8300ba382f52399807efd7dcb HowTo: Print alert messages 0 59 109 108 2021-09-17T11:04:23Z Lfairhead 1 wikitext text/x-wiki Routine 'prt_alerte' has been added to module phy_common/print_control_mod.F90 to enable developpers to print out informative messages on the first pass through physics and from the master process only. This can be used to remind oneself of potential problems or further enhancements. Messages can be differentiated by a 'priority' code 0/1/2 (corresponding to GREEN/ORANGE/RED alerts) By default, the messages are output in a file called ALERTES.txt but changing the unit number to 6 in the print_control_mod.F90 file allows you to print out your messages to the screen. To use you simply need to: * have this USE statement at the start of your routine: USE print_control_mod, ONLY: prt_level, lunout, call_alert, prt_alerte * ensure that the modname variable is defined and contains the name of your routine then you just need to add the following lines in your routine wherever you want to ouput your message (preferably not in a do loop) message='your informative message' IF (call_alert) CALL prt_alerte(message,modname,CODE) where message is the message to print out modname is the routine name CODE is an integer representing your priority code (0/1/2) and you should get messages of the form ALERTE ROUGE cva_driver! ym missing init, need to have a look by developpers ALERTE VERTE orosetup_strato! ym correction en attendant mieux in your output file. [[Catégorie:HowTo]] 2118cc25ad8c744c0ee4cfd327f121ceb827e2e9 Outils LMDZ 0 61 111 2021-09-17T14:07:26Z Lfairhead 1 Page créée avec « Some tools made especially for LMDZ are available at [https://lmdz.lmd.jussieu.fr/utilisateurs/utilisation-de-lmdz Boîte à outils LMDZ]. [[Category:FAQ]] Category:Env... » wikitext text/x-wiki Some tools made especially for LMDZ are available at [https://lmdz.lmd.jussieu.fr/utilisateurs/utilisation-de-lmdz Boîte à outils LMDZ]. [[Category:FAQ]] [[Category:Environnement]] ad9e32fcae341b4d8fd458862b8d05a7f9bdf097 Whatis: the physiq.def file 0 62 112 2021-09-23T15:18:20Z Lfairhead 1 Page créée avec « = physiq.def = The physiq.def file contains all the parameters and switches for the physical package [[Category : WhatIs]] » wikitext text/x-wiki = physiq.def = The physiq.def file contains all the parameters and switches for the physical package [[Category : WhatIs]] d2d7811733e483886747b0c2d1d81b8ff90f5be5 154 112 2021-11-26T07:44:18Z Emillour 3 wikitext text/x-wiki = physiq.def = The physiq.def file contains all the parameters and switches for the physical package. In practice choosing which parametrization (and associated parameter values) to use is simply done by setting the right flags in physiq.def. Examples of reference physiq.def files can be found in the "DefLists" subdirectory of LMDZ. 25/11/2021 [[Category : WhatIs]] 538ec7023c015204c601faecfb90fd4f25ec3254 WhatIs: The LD LIBRARY PATH environment variable 0 63 113 2021-09-24T11:55:25Z Emillour 3 Page créée avec « When a program runs, it looks for the dynamically linked libraries (*.so files) it needs. The information on where to look for is stored in the LD_LIBRARY_PATH environmen... » wikitext text/x-wiki When a program runs, it looks for the dynamically linked libraries (*.so files) it needs. The information on where to look for is stored in the LD_LIBRARY_PATH environment variable, which contains the list of paths to scan, e.g.: <code>LD_LIBRARY_PATH=/some/path/to/lib:/some/other/path/to/lib</code> If the program fails to find a sought library, then it will not start and stop with an error message of the likes of: <code>error while loading shared libraries: libnetcdff.so</code> In the example above <ode>libnetcdf.so</code> was not found in any of the directories listed in LD_LIBRARY_PATH. Simply updating LD_LIBRARY_PATH with the correct path (for the sake of this example let's say libnetcdff.so is located in /my/personal/libraries/netcdf/lib): <code>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/personal/libraries/netcdf/lib</code> will solve the problem. Note that you have to first update the LD_LIBRARY_PATH environment variable and the run your program. To know which *.so libraries an executable (e.g. mycode.e) needs and where it finds them: <code>ldd mycode.e</code> Note that an alternative to having to specify the paths in LD_LIBRARY_PATH is to specify the path at compile time (at the linking step) using the <code>-Wl,-rpath=</code> option [[Category:WhatIs]] eee10d440db39bddd9e4ba9470959498c95c6e7d 122 113 2021-09-27T09:16:20Z Emillour 3 wikitext text/x-wiki When a program runs, it looks for the dynamically linked libraries (*.so files) it needs. The information on where to look for is stored in the LD_LIBRARY_PATH environment variable, which contains the list of paths to scan, e.g.: <code>LD_LIBRARY_PATH=/some/path/to/lib:/some/other/path/to/lib</code> If the program fails to find a sought library, then it will not start and stop with an error message of the likes of: <code>error while loading shared libraries: libnetcdff.so</code> In the example above <code>libnetcdf.so</code> was not found in any of the directories listed in LD_LIBRARY_PATH. Simply updating LD_LIBRARY_PATH with the correct path (for the sake of this example let's say libnetcdff.so is located in /my/personal/libraries/netcdf/lib): <code>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/personal/libraries/netcdf/lib</code> will solve the problem. Note that you have to first update the LD_LIBRARY_PATH environment variable and the run your program. To know which *.so libraries an executable (e.g. mycode.e) needs and where it finds them: <code>ldd mycode.e</code> Note that an alternative to having to specify the paths in LD_LIBRARY_PATH is to specify the path at compile time (at the linking step) using the <code>-Wl,-rpath=</code> option [[Category:WhatIs]] b1df6b6a4b7d22a2c65e6c0d77e5f13efd364b49 123 122 2021-09-27T09:17:01Z Emillour 3 wikitext text/x-wiki When a program runs, it looks for the dynamically linked libraries (*.so files) it needs. The information on where to look for is stored in the LD_LIBRARY_PATH environment variable, which contains the list of paths to scan, e.g.: <code>LD_LIBRARY_PATH=/some/path/to/lib:/some/other/path/to/lib</code> If the program fails to find a sought library, then it will not start and stop with an error message of the likes of: <code>error while loading shared libraries: libnetcdff.so</code> In the example above <code>libnetcdf.so</code> was not found in any of the directories listed in LD_LIBRARY_PATH. Simply updating LD_LIBRARY_PATH with the correct path (for the sake of this example let's say libnetcdff.so is located in /my/personal/libraries/netcdf/lib): <code>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/personal/libraries/netcdf/lib</code> will solve the problem. Note that you have to first update the LD_LIBRARY_PATH environment variable and the run your program. To know which *.so libraries an executable (e.g. mycode.e) needs and where it finds them: <code>ldd mycode.e</code> Note that an alternative to having to specify the paths in LD_LIBRARY_PATH is to specify the path at compile time (at the linking step) using the <code>-Wl,-rpath=</code> option 27/09/2021 [[Category:WhatIs]] 3bffcadbca5501963e53c7d1fd91b6bbd1e3a54d HowTo: Hard code the path to a dynamic library in the executable 0 64 114 2021-09-24T12:32:02Z Emillour 3 Page créée avec « If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic... » wikitext text/x-wiki If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic libraries (*.so shared object libraries), you can hard code the paths at compile (linking) time, with the <code>-Wl,rpath=</code> option. == general illustrative example == You want your executable to always first look for the needed library in /my/personal/stuff/lib and /some/other/place/lib , then compile with: <code>-Wl,rpath=/my/personal/stuff/lib:/some/other/place/lib</code> The drawback of this method is that if the libraries are later moved to different locations, your executable won't know about it and probably abort with an error message of the likes of: <code>error while loading shared libraries: ...</code> == LMDZ-specific example == Since compilation options are set in the arch.fcm file, this is where the option <code>-Wl,rpath=...</code> should be set, on the line starting with <code>%BASE_LD</code> For example if one wants to hard code to look for personal netcdf libraries that are located in /my/personal/netcdf/lib: <code>%BASE_LD -Wl,-rpath=/my/personal/netcdf/lib [[Category:HowTo]] 703683a6206a7e2c235119fadb49199e83639692 124 114 2021-09-27T09:22:44Z Lfairhead 1 wikitext text/x-wiki If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic libraries (*.so shared object libraries), you can hard code the paths at compile (linking) time, with the <code>-Wl,rpath=</code> option. == general illustrative example == You want your executable to always first look for the needed library in /my/personal/stuff/lib and /some/other/place/lib , then compile with: <code>-Wl,rpath=/my/personal/stuff/lib:/some/other/place/lib</code> The drawback of this method is that if the libraries are later moved to different locations, your executable won't know about it and probably abort with an error message of the likes of: <code>error while loading shared libraries: ...</code> == LMDZ-specific example == Since compilation options are set in the [[WhatIs:_The_target_architecture_("arch")_files|arch.fcm]] file, this is where the option <code>-Wl,rpath=...</code> should be set, on the line starting with <code>%BASE_LD</code> For example if one wants to hard code to look for personal netcdf libraries that are located in /my/personal/netcdf/lib: <code>%BASE_LD -Wl,-rpath=/my/personal/netcdf/lib [[Category:HowTo]] e9f70d8edf3e8d514ccf8b986d23326f213d6558 Catégorie:Parallel 14 65 115 2021-09-27T09:03:58Z Lfairhead 1 Page créée avec « Pour ranger tout ce qui a trait au parallélisme dans LMDZ » wikitext text/x-wiki Pour ranger tout ce qui a trait au parallélisme dans LMDZ 8dfae98fb1f83efc69640fb4992a1665e2115212 Catégorie:Xios 14 66 116 2021-09-27T09:04:35Z Lfairhead 1 Page créée avec « Pour tout ce qui a trait à XIOS dans LMDZ » wikitext text/x-wiki Pour tout ce qui a trait à XIOS dans LMDZ 5154deb5ac4026c71e29eec8219ddc0a0720b702 XIOS : "something must be wrong with mask index" 0 40 118 72 2021-09-27T09:09:45Z Emillour 3 wikitext text/x-wiki Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants : info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index Vous pouvez ignorer ce message. Dans le cas de LMDZ, on a bien de "l'overlap" entre les domaines de sortie, donc pas de soucis. C'est une mise en garde plus pour les développeurs. Si effectivement on n'a pas de recouvrement entre les domaines, ce message peut être le signe d'un problème lors du calcul des index de transfert entre clients et serveurs. [[Category:FAQ]] [[Category:ErrorMessages]] [[Category:xios]] a00aeb885826724eead2f4e6351477e869bb8aad 141 118 2021-11-15T07:36:12Z Emillour 3 wikitext text/x-wiki In a simulation using XIOS et LMDZ in client-server mode, XIOS may generate the following message : <code> info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index </code> It is a harmless warning message, mainly for developers. It is just that with LMDZ there can be some overlap between output domains. If however you are in a situation where you know there is no overlap between domains, then this message indicates that something must be wrong in the computation of transfer indexes between clients and servers. [[Category:FAQ]] [[Category:ErrorMessages]] [[Category:xios]] 259fcf3cc9f905283643c1852e8adec14313d5f9 Nombre de variables trop grand dans un fichier d'historique, avec XIOS 0 41 119 73 2021-09-27T09:11:13Z Emillour 3 wikitext text/x-wiki Symptôme : terminate called after throwing an instance of 'xios::CNetCdfException' what(): Error when calling function nc_enddef(ncId) NetCDF: HDF error Unable to end define mode of this file, given its id: 65536 Program received signal SIGABRT: Process abort signal. Ce problème peut se poser avec XIOS quand on augmente par exemple le niveau de sortie d'un fichier d'historique. C'est un problème de netcdf4 + HDF5 en mode écriture parallèle. Pour une raison obscure, lorsqu'on tente de déclarer trop de champs avec trop de méta-données, une erreur se produit au moment de nc_enddef. C'est un problème de longue date qui combine le nombre de champs, associé à leurs tailles et au volume de méta-données, sans qu'il y ait pour autant une règle claire. Les work-arounds : * mettre moins de variables par fichier : baisser le niveau ou regrouper les variables par niveau dans un même fichier * utiliser la version séquentielle qui fonctionne on ne sait pas trop pourquoi : avoir un seul processus ou un seul serveur XIOS ou utiliser les deux niveaux de serveur qui font des écritures séquentielles au final. * utiliser pnetcdf (format classique) au lieu de netcdf4+HDF5 avec XIOS. Je sais, c'est un peu lourd, mais on n'a pas vraiment le choix que de s'adapter à cette contrainte pour le moment, qui sera peut-être levée un jour. [[Category:FAQ]] [[Category:ErrorMessages]] [[Category:xios]] 2f90d1b1a71640468c851bce25a91f4d1b06f7dc Catégorie:ErrorMessages 14 68 120 2021-09-27T09:11:21Z Lfairhead 1 Page créée avec « Exemple de messages d'erreur rencontrés dans LMDZ et des idées sur comment les résoudre » wikitext text/x-wiki Exemple de messages d'erreur rencontrés dans LMDZ et des idées sur comment les résoudre 05ef6790c4cedf4384e0e4f77ed4205436b29509 121 120 2021-09-27T09:12:03Z Lfairhead 1 wikitext text/x-wiki Exemple de messages d'erreur rencontrés dans LMDZ et des idées sur comment les résoudre [[Category:FAQ]] bde28589905bd960c52c73ed27173a479de53cda WhatIs: The target architecture ("arch") files 0 30 125 57 2021-09-27T09:24:56Z Lfairhead 1 wikitext text/x-wiki == A brief description of the architecture files used by the makelmdz_fcm script == The target architecture files are files used by the makelmdz_fcm compilation script. These files contain all the necessary information about the local environment, where libraries are located, which compiler, and compiler options will be used, etc. In practice, when the [[WhatIs:_The_makelmdz_fcm_script|makelmdz_fcm]] is run with "-arch somename", it will look for files "arch-somename.env", "arch-somename.path" and "arch-somename.fcm" (obviously "somename" can be any string, makelmdz_fcm will adapt the arch file names it seeks) in the LMDZ/arch subdirectory. and link these as "arch.env", "arch.path" and "arch.env" in the LMDZ directory. Re-running makelmdz_fcm with a different argument to the "-arch" option will update these links. '''The arch.env file''' This file is optional. It should contain instructions and declarations related to the environment (e.g. setting up environment variables, or loading modules), necessary prerequisites to compiling LMDZ. For example the "arch/arch-gfortran_CICLAD.env" file that contains: module unload openmpi module load openmpi/1.4.5-gfortran module unload netcdf4 module load netcdf4/4.2.1.1-gfortran export NETCDF_HOME=/opt/netcdf42/gfortran imposes first running some "module" commands and setting the environment variable "NETCDF_HOME" prior to the compilation. '''The arch.path file''' This file contains information about the paths (relative to the LMDZ directory) and options concerning libraries (NetCDF, IOIPSL, etc.) required to compile LMDZ. For example the "arch/arch-gfortran_CICLAD.path" contains: NETCDF_LIBDIR="-L${NETCDF_HOME}/lib -lnetcdf -lnetcdff" NETCDF_INCDIR=-I${NETCDF_HOME}/include IOIPSL_INCDIR=$LMDGCM/../../lib IOIPSL_LIBDIR=$LMDGCM/../../lib ORCH_INCDIR=$LMDGCM/../../lib ORCH_LIBDIR=$LMDGCM/../../lib OASIS_INCDIR=$LMDGCM/../../prism/SX/build/lib/psmile.$couple OASIS_LIBDIR=$LMDGCM/../../prism/SX/lib INCA_LIBDIR=$LMDGCM/../INCA/config/lib INCA_INCDIR=$LMDGCM/../INCA/config/lib XIOS_INCDIR=$LMDGCM/../XIOS/inc XIOS_LIBDIR=$LMDGCM/../XIOS/lib Here the keywords are quite self-explanatory, for each external library, NetCDF, IOIPSL, XIOS, ... one provide the compiling intructions about related "include" directories along with the path to the libraries. '''The arch.fcm file''' This file contains information about the compiler to use and compiler options to set. Each line starts with a reserved keyword, followed by the appropriate specifications. For example the "arch/arch-gfortran_CICLAD.fcm" file contains: %COMPILER $MPI_BIN/mpif90 %LINK $MPI_BIN/mpif90 %AR ar %ARFLAGS rs %MAKE gmake %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE %BASE_FFLAGS -c -fdefault-real-8 -fcray-pointer -frecursive -ffree-line-length-0 -fno-align-commons %PROD_FFLAGS -O3 %DEV_FFLAGS -O -Wall -fbounds-check %DEBUG_FFLAGS -ffpe-trap=invalid,zero,overflow -Wall -fbounds-check -g3 -O0 -fstack-protector-all -fbacktrace %MPI_FFLAGS %OMP_FFLAGS -fopenmp %BASE_LD -Wl,-rpath=$NETCDF_HOME/lib %MPI_LD %OMP_LD -fopenmp Implying that the compiler to use is "mpif90", located in "$MPI_BIN/mpif90" (here $MPI_BIN is an environment variable that has been set via the "module load openmpi/1.4.5-gfortran" command from the corresponding arch-gfortran_CICLAD.env file), that compilation will always include the "-c -fdefault-real-8 -fcray-pointer -frecursive ffree-line-length-0 -fno-align-commons" options, etc. The meaning of the various keywords in the arch.fcm file are: * %COMPILER: The compiler to use * %LINK: The linker to use (usually this is the same as the compiler) * %AR: the archiving tool (to collect objects and build the library, typically "ar") * %ARFLAGS: options to give to the archiving tool * %FPP_FLAGS: options to pass to the preprocessor of the Fortan source code * %FPP_DEF: preprocessing flags to set * %BASE_FFLAGS: compilation flags to alway include when compiling the source code * %PROD_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-prod" option * %DEV_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-dev" option * %DEBUG_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-debug" option * %MPI_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel mpi" or "-parallel mpi_omp" options (i.e. to have a code that can run in MPI) * %OMP_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel omp" or "-parallel mpi_omp" options (i.e. to have a code that can run in OpenMP) * %BASE_LD: flags to add when running the linker * %MPI_LD: flags to add when running the linker when MPI is enabled * %OMP_LD: flags to add when running the linker when OpenMP is enabled 13/05/2020 [[Category:WhatIs]] a564335374f8c087b9a0d8a19694db92f24d9817 Accueil 0 1 126 105 2021-09-27T09:32:47Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|300px|center]] ''The ultimate LMDZ knowledge database'' * SEARCH [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 63a240159b27403396ec5a1739166254f01557b8 127 126 2021-09-27T09:34:00Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|300px|center]] ''The ultimate LMDZ knowledge database'' Utiliser la recherche en haut à droite / Use search box on top right [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] == Pour démarrer == Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] 0400bb9bb7540e91ee9f836d314cde6ba103bdea 128 127 2021-09-28T15:05:35Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|300px|center]] ''The ultimate LMDZ knowledge database'' <inputbox> type=search2 break=no placeholder=Search this Wiki </inputbox> [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] ==== Pour les contributeurs ==== Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] <br> <div style="float:{left}; width:12em"> <inputbox> type=create break=no buttonlabel=Créer une nouvelle page </inputbox> </div> f5d46d732860427366a6e64b0e1bef0b94809d1c 129 128 2021-09-28T15:25:58Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|300px|center]] ''The ultimate LMDZ knowledge database'' Search / Chercher : <inputbox> type=search2 inline=true width=10 </inputbox> [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] ==== Pour les contributeurs ==== Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] <br> <div style="float:{left}; width:12em"> <inputbox> type=create break=no buttonlabel=Créer une nouvelle page </inputbox> </div> 80631d8433a47b8b034a8e1e19c85e7639c6515e 130 129 2021-09-28T15:28:39Z Lfairhead 1 wikitext text/x-wiki = LMDZPedia = === Welcome to the front page of LMDZPedia === === Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ === [[File:Lmdzpedia.png|300px|center]] ''The ultimate LMDZ knowledge database'' <inputbox> type=fulltext inline=true width=50 placeholder=Search this Wiki </inputbox> [[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]] [[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]] ==== Pour les contributeurs ==== Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki. * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki] * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki] * [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue] * [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki] <br> <div style="float:{left}; width:12em"> <inputbox> type=create break=no buttonlabel=Créer une nouvelle page </inputbox> </div> d08f9f0105b494bd94f02153d044384f59bbd4b7 Whatis: the libf directory 0 69 131 2021-10-14T13:08:11Z Emillour 3 Page créée avec « The LMDZ source Fortran code is located under the libf directory of the root LMDZ directory. The various directories (and their respective subdirectories) are there to s... » wikitext text/x-wiki The LMDZ source Fortran code is located under the libf directory of the root LMDZ directory. The various directories (and their respective subdirectories) are there to separate codes with various functionalities. The main driver in this organization is to cleanly separate dynamics, physics and their interface. In practice: == dynamics solver related subdirectories == '''dyn3d''' : dynamics, serial version '''dyn3dpar''' : dynamics, parallel version. Obsolete (many arrays remained global requiring more overall memory with increasing core number) '''dyn3dmem''' : dynamics, parallel (optimized) version with improved memory management (all arrays are local to each core) '''dyn3d_common''' : routines used by all dynamics (serial or parallel) '''filtre''' : high-latitude longitudinal filter for lonxlat grid (used by the dynamics, serial or parallel) '''grid''' : routine for model's grid generation (used by the dynamics, serial or parallel) == physics packages related subdirectories == '''phy*''' : various physics packages: - phylmd: standard terrestrial lmd physics - phylmdiso: version with isotopes (temporary, should be merged in phylmd) - phymar: physics of the 'modele atmospherique regional', obsolete - phydev: 'physics that does nothing but does it well' '''phy_common''' : common routines to all physics (different modules for parallelism, abort_physics, geometry, getin wrapper, ...) == physics-dynamics interface == '''dynphy_lonlat''': contains the dynamics/physics interface with at a first level common routines to all physics and dedicated specific routines for each physics (e.g., call physics + physics initialization) in a subdirectory of the same name as the physics package's (phylmd, phydev, ...). In addition the subdirectory stores main programs, other than the gcm, which require access to both physics and dynamics routines (e.g. to generate initial states, such as ce0l). Note that if a physics package name is an extension of an already existing physics package (e.g. phylmdiso and phylmd) then they share the same interface (phylmd here). '''phy*/dyn1d''': the 1D model (and links to some required dyn3d/* routines) == others == '''misc''': (misceallenous) dynamics and physics independent routines which can be used by either but rely on neither (e.g. random number generator, tridiagonal matrix solver, NetCDF function wrappers, CRAY-specific routines, ...) obsolete: obsolete code not used anymore but moved and stored here for an easy quick look. 14/10/2021 [[Category:WhatIs]] 3ac464ae98456971f51bd6b99c95c5e1df5b60f0 WhatIs: the ioipsl library 0 70 132 2021-10-18T07:38:02Z Emillour 3 Page créée avec « The IOIPSL (for Input Output IPSL) library is a library used by LMDZ to read in input parameters (from the run.def text file and related *.def files) and write output NetC... » wikitext text/x-wiki The IOIPSL (for Input Output IPSL) library is a library used by LMDZ to read in input parameters (from the run.def text file and related *.def files) and write output NetCDF files (histmth.nc, histins.nc, etc.) at runtime. Although still quite functionnal, use of IOIPSL to generate output files is now depreciated in favor of the XIOS library. 18/10/2021 [[Category:WhatIs]] be4d81ce1c78da7ab3a15c0a0cfa40a7707fa9be 140 132 2021-11-15T07:28:30Z Emillour 3 wikitext text/x-wiki The IOIPSL (for Input Output IPSL) library is a library used by LMDZ to read in input parameters (from the run.def text file and related *.def files) and write output NetCDF files (histmth.nc, histins.nc, etc.) at runtime. Note that when running in parallel (MPI), each process will generate each its own set of output files: histmth_0000.nc, histins_0000.nc, etc. for process number 0, histmth_0001.nc, histins_0001.nc, etc. for process number 1, and so on. Once the run is finished it is up to the user to recombine these hist*_*.nc files into single files gathering the data over the entire planet, using the IOIPSL ''rebuild'' script, e.g.: <code>rebuild histmth.nc histmth_*.nc</code> Although still quite functional, use of IOIPSL to generate output files is now depreciated in favor of the XIOS library. 15/11/2021 [[Category:WhatIs]] 48a6743e2d1dcfa1541d30269e479d413fbfd167 Halos 0 3 133 39 2021-11-04T07:30:07Z Emillour 3 wikitext text/x-wiki == Warning: Quite technical stuff here!!! == In the dynamics, the MPI/OpenMP assigned domains to a each core can be hard to keep up with... especially as it also depends on the grid (scalar, U, V) a given variable is Some nomenclature: * ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid * ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid * ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid * ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't (see parallel_lmdz.F90). Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid. The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos. 04/11/2021 [[Category:Parallel]] c9898b7d69a833cf8576e8422fb7dc90dbec8745 134 133 2021-11-04T10:28:27Z Emillour 3 wikitext text/x-wiki == Warning: Quite technical stuff here!!! == In the dynamics, the MPI assigned domains to a each core can be hard to track of... especially as it also depends on the grid (scalar, U, V) a given variable is Some nomenclature: * jjb_u,jje_u => "latitudinal indexes", for a variable on the (iip1,jj_b:jj_e) horizontal grid U grid * jjb_v,jje_v => "latitudinal indexes", for a variable on the (iip1,jj_b:jj_e) horizontal grid V grid * ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid * ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid * ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid * ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't (see parallel_lmdz.F90). Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid. The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos. 04/11/2021 [[Category:Parallel]] 48aabb297a2587f0bef040d30a55e342ffa7f28a 135 134 2021-11-04T10:29:16Z Emillour 3 wikitext text/x-wiki == Warning: Quite technical stuff here!!! == In the dynamics, the MPI assigned domains to a each core can be hard to track of... especially as it also depends on the grid (scalar, U, V) a given variable is Some nomenclature: * jjb_u, jje_u => "latitudinal indexes", for a variable on the (iip1,jjb_u:jje_u) horizontal grid U grid * jjb_v, jje_v => "latitudinal indexes", for a variable on the (iip1,jjb_v:jje_v) horizontal grid V grid * ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid * ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid * ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid * ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't (see parallel_lmdz.F90). Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid. The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos. 04/11/2021 [[Category:Parallel]] 06add725cadf9fedae451f9ef3541629ffcf6b50 146 135 2021-11-17T12:51:38Z Emillour 3 wikitext text/x-wiki == Warning: Quite technical stuff here!!! == In the dynamics, the MPI assigned domains to a each core can be hard to track of... especially as it also depends on the grid (scalar, U, V) a given variable is Some nomenclature: * jjb_u, jje_u => "latitudinal indexes", for a variable on the (iip1,jjb_u:jje_u) horizontal grid U grid * jjb_v, jje_v => "latitudinal indexes", for a variable on the (iip1,jjb_v:jje_v) horizontal grid V grid * ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid * ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid * ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid * ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't (see parallel_lmdz.F90). Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid. The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos. 04/11/2021 [[Category:Parallel]] [[Category:ExpertDev]] 1cd8f9ad517c82e9244705678d5fd3b8cd7c6733 WhatIs: The ngroup parameter 0 71 136 2021-11-05T16:55:36Z Emillour 3 Page créée avec « The "ngroup" parameter (which one would set in the gcm.def file and has otherwise a default value of 3) is a parameter concerning a specific "filtering" near the poles (wh... » wikitext text/x-wiki The "ngroup" parameter (which one would set in the gcm.def file and has otherwise a default value of 3) is a parameter concerning a specific "filtering" near the poles (which helps stabilizing the model). In practice it is applied to the divergence of air transport (pbaru/v) and of tracers, by grouping meshes in longitudes two by two, assuming a constant divergence in grouped meshes. Longitudinal grouping of meshes is such that it increases as one reaches the poles, doubling at each new latitude (i.e. groups of 2,...,2**ngroup). To put it a different way, starting from the pole, groups of 2**ngroup are made (i.e. 8 if ngroup==3 or 16 if ngroup==4, which also implies that the number of grid points along longitudes must be a multiple of 2**ngroup), then at the next latitude band groups of 2**(ngroup-1) are used (i.e. 4 if ngrou==3 or 8 if ngroup==4), followed at the next latitude band groups of 2**(ngroup-2), etc. until no grouping remains to be done. == Recommended values of ngroup == A general rule of thumb : * for horizontal grids of the order of up to 180x90, ngroup=3 is fine * for horizontal grids of the order of 256x256 or 360x180, ngroup=4 seems better (stabilizing) * for horizontal grids of 720x360, ngroup=5 is likely better 30/10/2021 [[Category:WhatIs]] [[Category:Inputs]] a67d730b7a160d3bf8aec9ce4421ade0f167a454 137 136 2021-11-05T16:56:26Z Emillour 3 wikitext text/x-wiki The "ngroup" parameter (which one would set in the gcm.def file and has otherwise a default value of 3) is a parameter concerning a specific "filtering" near the poles (which helps stabilizing the model). In practice it is applied to the divergence of air transport (pbaru/v) and of tracers, by grouping meshes in longitudes two by two, assuming a constant divergence in grouped meshes. Longitudinal grouping of meshes is such that it increases as one reaches the poles, doubling at each new latitude (i.e. groups of 2,...,2**ngroup). To put it a different way, starting from the pole, groups of 2**ngroup are made (i.e. 8 if ngroup==3 or 16 if ngroup==4, which also implies that the number of grid points along longitudes must be a multiple of 2**ngroup), then at the next latitude band groups of 2**(ngroup-1) are used (i.e. 4 if ngroup==3 or 8 if ngroup==4), followed at the next latitude band groups of 2**(ngroup-2), etc. until no grouping needs to be done. == Recommended values of ngroup == A general rule of thumb : * for horizontal grids of the order of up to 180x90, ngroup=3 is fine * for horizontal grids of the order of 256x256 or 360x180, ngroup=4 seems better (stabilizing) * for horizontal grids of 720x360, ngroup=5 is likely better 30/10/2021 [[Category:WhatIs]] [[Category:Inputs]] ce092aefdb9b03aeda0b31809251c5e46f58334a Catégorie:Inputs 14 72 138 2021-11-05T16:57:40Z Emillour 3 Page créée avec « Inputs (files and parameters) used by the GCM » wikitext text/x-wiki Inputs (files and parameters) used by the GCM 4d93a639e5270f881ffa17ba93760f1705ce6cbc WhatIs: The Bands *.dat file 0 33 139 60 2021-11-11T17:58:56Z Emillour 3 wikitext text/x-wiki == What is the Bands_*.dat file produced by LMDZ at run-time == When it is run in parallel (using MPI), LMDZ looks for a file in the current directory that is called "Bands_IIMxJJMxLLMxN.dat", where IIM,JJM,LLM are the model's horizontal and vertical resolution (same as when compiling) and N is the number of MPI processes to use. If there is no "Bands_IIMxJJMxLLMxN.dat", then a default one is created at run-time. Content of the "Bands_IIMxJJMxLLMxN.dat" file: It consists of 4 sections of 2 columns each: the first column contains the MPI process number and the second the number of latitude bands (or columns, for section 4) that are assigned to it. The first section is relative to computations in the dynamics, the second to tracer advection (in the dynamics), the third to dissipation (also in the dynamics) and the fourth to physics. [[Category:WhatIs]] [[Category:Parallel]] 3b3f08fea546b9b67d4039bafd37c8c05eb60a29 HowTo: debug the quality control 0 73 142 2021-11-16T14:25:47Z Lfairhead 1 Page créée avec « As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that no... » wikitext text/x-wiki As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite] === How to debug a failed quality check === Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk directory with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk directory. de964ac3865d435265290da68694b2d7d0bfc375 143 142 2021-11-16T14:33:35Z Lfairhead 1 wikitext text/x-wiki As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite] === How to debug a failed quality check === Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. 8fdb48c540e9e2eb94244b27bff8f9e366c89d39 144 143 2021-11-16T14:36:07Z Lfairhead 1 wikitext text/x-wiki As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite] === How to debug a failed quality check === Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] 02f2e254367c9fbe818cb45b94c535ec46bf407b Catégorie:ExpertDev 14 74 145 2021-11-16T14:36:50Z Lfairhead 1 Page créée avec « Useful information for experts and developpers » wikitext text/x-wiki Useful information for experts and developpers a6adf33fb6fab06f00a24233155fddcfb017cec1 WhatIs : The use filtre fft parameter 0 75 147 2021-11-22T16:45:41Z Emillour 3 Page créée avec « == The longitudinal filter == To minimize stability issues due to grid size diminishing as the pole is approached, some filtering is applied to remove short wavelength (hi... » wikitext text/x-wiki == The longitudinal filter == To minimize stability issues due to grid size diminishing as the pole is approached, some filtering is applied to remove short wavelength (high frequency) structures along longitudes. This operation can be summarized as maintaining an effective grid resolution (along a longitude circle) to that existing at latitudes +/-60°. == the use_filtre_fft parameter == In practice the filtering along a longitude circle of N points requires computations with a cost of the order of N*N. And this is the default behavior in the code. It is however possible to do the same work using efficient FFT (Fast Fourire Transform) operations, which cost less (somethings of the order of N*log(N) operations). In fact the larger N is, the more advantageous it is to use the FFT for filtering. To activate the FFT filtering, just set use_filtre_fft=y in your run.def file. Note that the FFT filtering is only implemented in the parallel dynamical core and not the serial one. 22/11/2021 [[Category:WhatIs]] [[Category:inputs]] 9c3693106187a5297efb75fc47c5845e6b2db1c2 WhatIs: The XIOS library 0 76 148 2021-11-23T12:19:46Z Emillour 3 Page créée avec « The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously fr... » wikitext text/x-wiki The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated. All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory. To compile with XIOS enabled, one must specify the option -io xios to the makelmdz_fcm script. In addition the flag ok_all_xml=y should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur. 20/11/2021 [[Category:WhatIs]] f29f329a02eb7912306c9b328a8978df73ac89cf LMDZ zoom collection 0 14 149 28 2021-11-24T08:31:51Z Emillour 3 wikitext text/x-wiki == Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs == The collaborative Google spreadsheet summarizing some zoomed simulation setups: [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"] [[Catégorie:Zoom]] be30a864bfbd4d226d40a15dfdbb2fc2703d9aff LMDZ zoom parameters 0 77 150 2021-11-24T09:08:42Z Emillour 3 Page créée avec « The "Z" in LMDZ stands for "Zoom". This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes... » wikitext text/x-wiki The "Z" in LMDZ stands for "Zoom". This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes. == Zoom parameters == In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def): * The zoom center coordinates (in degrees), ''clon'' and ''clat'' * The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it. * The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude * The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically reasonable value; with strong nudging harsher transitions , e.g. tau~8 can also work). == Choosing an adequate time step for a zoomed simulation == The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid): day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy) It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]] 24/11/2021 [[Catégorie:Zoom]] addadf540594deb2e01fe40d808502e26e90e919 152 150 2021-11-25T09:17:03Z Emillour 3 wikitext text/x-wiki The "Z" in LMDZ stands for "Zoom". This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes. == Zoom parameters == In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def): * The zoom center coordinates (in degrees), ''clon'' and ''clat'' * The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it. * The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude * The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 can also work). == Choosing an adequate time step for a zoomed simulation == The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid): day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy) It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]] 24/11/2021 [[Catégorie:Zoom]] 942ea6f0253eac88288e8781b5c49c5a6e564668 153 152 2021-11-25T09:20:25Z Emillour 3 wikitext text/x-wiki The "Z" in LMDZ stands for "Zoom". This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes. == Zoom parameters == In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def): * The zoom center coordinates (in degrees), ''clon'' and ''clat'' * The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it. * The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude * The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 or even 10 can also work). * It is advised to target, by adjusting number of points along longitude and latitude, to have something close to a "square" mesh (i.e. same extension, in degrees, along longitudes and latitudes)in the inner zoomed area. == Choosing an adequate time step for a zoomed simulation == The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid): day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy) It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]] 24/11/2021 [[Catégorie:Zoom]] be5d67e9596314c2947523a5b0b7e456540c9817 WhatIs: The makelmdz fcm script 0 29 151 56 2021-11-25T09:13:06Z Emillour 3 wikitext text/x-wiki == The makelmdz_fcm script to compile LMDZ == The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.). To list available options, run "makelmdz_fcm -h", which should return something like: <pre> makelmdz_fcm [options] -arch nom_arch exec [-h] : brief help [-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19) [-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd) [-prod / -dev / -debug] : compilation mode production (default) / developement / debug [-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false) [-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false) false : no vegetation model orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version) orchidee2.0 : compile using ORCHIDEE 2.0 orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6 true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6 [-chimie INCA/false] : with INCA chemistry model or without (default: false) [-cosp true/false] : compile with/without cosp package (default: false) [-cosp2 true/false] : compile with/without cosp2 package (default: false) [-cospv2 true/false] : compile with/without cospv2 package (default: false) [-inlandsis true/false] : compile with/without inlandsis package (default: false) [-rrtm true/false] : compile with/without rrtm package (default: false) [-rad old/rrtm/ecrad] : compile with old/rrtm/ecrad radiatif code (default: old) [-dust true/false] : compile with/without the dust package by Boucher and co (default: false) [-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false) [-isotopes true/false] : compile with/without water isotopes in the physics [-isoverif true/false] : compile with/without verifications for water isotopes in the physics [-diagiso true/false] : compile with/without special diagnostics for water isotopes in the physics [-isotrac true/false] : compile with/without tracers of water isotopes in the physics [-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp [-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom) [-io ioipsl/mix/xios] : Input/Output library (default: ioipsl) [-include INCLUDES] : extra include path to add [-cpp CPP_KEY] : additional preprocessing definitions [-adjnt] : adjoint model, not operational ... [-mem] : reduced memory dynamics (obsolete flag; always on in parallel mode) [-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez) [-link LINKS] : additional links with other libraries [-j n] : active parallel compiling on ntask [-full] : full recompiling [-libphy] : only compile physics package (no dynamics or main program) [-fcm_path path] : path to the fcm tool (default: tools/fcm/bin) [-ext_src path] : path to an additional set of routines to compile with the model [-arch_path path] : path to architecture files (default: arch) -arch nom_arch : target architecture exec : executable to build </pre> The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD"). As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers). 25/11/2021 [[Category:WhatIs]] 6355590d18d337b9dfdde74fb308bfde535af51b WhatIs: The gcm.def file 0 78 155 2021-11-26T07:51:57Z Emillour 3 Page créée avec « The gcm.def file ("included" in the run.def file that is read by the GCM at runtime) contains parameters related to the global (horizontal) grid and time-marching setup :... » wikitext text/x-wiki The gcm.def file ("included" in the run.def file that is read by the GCM at runtime) contains parameters related to the global (horizontal) grid and time-marching setup : physics/dynamics time steps, dissipation factors, sponge layer, zoom properties... Many of these parameters are strongly linked to the horizontal resolution of the model. Some examples of typical parameter values for given resolutions can be found in the "DefLists" subdirectory of LMDZ. 26/11/2021 [[Category:WhatIs]] [[Category:Inputs]] f5c06715bb0d3165044e40ff2daa674cd786d766 Lateral dissipation in LMDZ 0 79 156 2021-11-29T09:08:55Z Emillour 3 Page créée avec « == Some information about lateral dissipation in LMDZ (and related input parameters) == === Overview === In a nutshell: It is necessary to add some lateral dissipation in... » wikitext text/x-wiki == Some information about lateral dissipation in LMDZ (and related input parameters) == === Overview === In a nutshell: It is necessary to add some lateral dissipation in order to fulfill the observed energy cascade from resolved scales (by the GCM) to unresolved scales (sub-grid scales, from the point of view of the GCM). In practice this is done by adding a dissipation term in the form of an iterated laplacian acting on winds and temperature. === Dissipation parameters === These are set in gcm.def. The main ones are: * dissip_period : Apply dissipation every dissip_period dynamical steps (default is 0, which implies let the model pick an appropriate value) * nitergdiv : number of iterations on velocity dissipation operator grad.div (typically 1) * nitergrot: number of iterations on velocity dissipation operator grad.rot (typically 2) * niterh: number of iterations on temperature dissipation operator div.grad (typically 2) * tetagdiv: dissipation time scale (s) for smallest wavelength for u,v (grad.div component) * tetagrot: dissipation time scale (s) for smallest wavelength for u,v (grad.rot component) * tetatemp: dissipation time scale (s) for smallest wavelength for potential temperature (div.grad) In addition there is a multiplicative factor for the dissipation coefficient, which increases with model levels (see dyn3d_common/inidissip.F90), which can be controlled by flag “vert_prof_dissip” (tampering with this flag is for experts only) === Good to know and rules of thumb === * Dissipation parameters should preferably be those stated in the example gcm.def files provided in the DefLists subdirectory. * If there are some numerical instabilities then one should try to increase dissipation (i.e. reduce teta* time scales) as this tends to stabilize the model. * Optimal values for tetadiv/tetarot/tetatemp depend on the horizontal resolution of the GCM. In practice, the higher the horizontal resolution, the more dissipation is needed. 29/11/2021 [[Category:inputs]] 71fbfc1a7b6bc0034d56e57c18d22afca51dd7e0 Ajout d'une variable d'état 0 80 157 2021-11-30T18:02:14Z Lguez 4 Page créée avec « Pour ajouter une variable d'état de la physique dans LMDZ : * déclarez-la dans le module <code>phys_state_var_mod</code> * allouez-la et désallouez-la dans les subrouti... » wikitext text/x-wiki Pour ajouter une variable d'état de la physique dans LMDZ : * déclarez-la dans le module <code>phys_state_var_mod</code> * allouez-la et désallouez-la dans les subroutines <code>phys_state_var_init</code> et <code>phys_state_var_end</code> * donnez-lui une valeur initiale dans la subroutine <code>etat0phys_netcdf</code> * lisez-la à partir du fichier <code>startphy.nc</code> dans la subroutine <code>phyetat0</code> * écrivez-la dans le fichier <code>restartphy.nc</code> dans la subroutine <code>phyredem</code> * si c'est une variable qui dépend de la sous-surface considérée, donnez-lui une valeur lorsqu'une sous-surface apparaît, dans la subroutine <code>pbl_surface_newfrac</code> 3d4b88d88d549443a10c15c5ac4c92e8f81b3c6d The sponge layer 0 81 158 2021-12-01T08:29:23Z Emillour 3 Page créée avec « == in a nutshell == The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top. In p... » wikitext text/x-wiki == in a nutshell == The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top. In practice its application is thus limited to a few of the topmost layers (usually 4), with decreasing impact with decreasing altitudes. The sponge layer is a relaxation of main variables (winds and/or potential temperature) towards a given value or their zonal mean along a given time scale. == Sponge layer parameters == The parameters controlling the sponge layer are in input file gcm.def * iflag_top_bound (integer): 0 for no sponge, 1 for a sponge over the last 4 topmost layers, 2 to have a sponge layer extending over topmost layers down to a pressure which is 100 times that of the topmost layer's. * mode_top_bound (integer): 0 for no relaxation, 1 to relax winds (u,v) to zero, 2 to relax winds (u,v) towards their zonal mean, 3 to relax winds (u,v) and potential temperature towards their zonal mean. * tau_top_bound (real, Hz): inverse of the relaxation characteristic time scale at the topmost layer; halved at each successive descending layer. == Application of the sponge == The sponge is applied right after dissipation at each dissipation step. 01/12/2021 [[Category:inputs]] ee5b652dadda64018055d0c8b93ca958b065b434 159 158 2021-12-02T07:53:17Z Emillour 3 wikitext text/x-wiki == in a nutshell == The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top. In practice its application is thus limited to a few of the topmost layers (usually 4), with decreasing impact with decreasing altitudes. The sponge layer is a relaxation of main variables (winds and/or potential temperature) towards a given value or their zonal mean along a given time scale. == Sponge layer parameters == The parameters controlling the sponge layer are in input file gcm.def (or sometimes in vert_L**.def as they are strongly linked to the vertical grid) * iflag_top_bound (integer): 0 for no sponge, 1 for a sponge over the last 4 topmost layers, 2 to have a sponge layer extending over topmost layers down to a pressure which is 100 times that of the topmost layer's. * mode_top_bound (integer): 0 for no relaxation, 1 to relax winds (u,v) to zero, 2 to relax winds (u,v) towards their zonal mean, 3 to relax winds (u,v) and potential temperature towards their zonal mean. * tau_top_bound (real, Hz): inverse of the relaxation characteristic time scale at the topmost layer; which is then halved at each successive descending layer. == Application of the sponge == The sponge is applied right after dissipation at each dissipation step. 01/12/2021 [[Category:inputs]] db30672f75efd7779b7897ebd38e9c4c41bc1b64 WhatIs: the ok hines parameter 0 82 160 2021-12-03T08:13:32Z Emillour 3 Page créée avec « The "ok_hines" parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file. If on, this parametri... » wikitext text/x-wiki The "ok_hines" parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file. If on, this parametrization accounts for the effect of gravity waves in the stratosphere when the later is not represented in the GCM. This is essentially a depreciated scheme, superseded by the more recent non-orographic gravity wave parametrization (flag "ok_gwd_rando"). In practice, when running in configurations without an explicit representation of the stratosphere (i.e. with 39 model levels or less) then one should have '''ok_hines=y''' and '''ok_gwd_rando=n''', whereas when running with the stratosphere (e.g. 79 model levels or more) then one should use '''ok_hines=n''' and '''ok_gwd_rando=y''' 03/12/2021 [[Category:WhatIs]] [[Category:Inputs]] 7efe1d90fa84028cb0a3322e67e406e65b92a8e2 WhatIs: The ok strato parameter 0 83 161 2021-12-03T08:26:33Z Emillour 3 Page créée avec « The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most... » wikitext text/x-wiki The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most often in the "vert.def" (or sometimes "gcm.def") file, as it is strongly linked to the model vertical resolution Setting '''ok_strato=y''' is recommended in most cases as it implies: * Some impact on the vertical discretization (i.e. where the model levels are placed) * Some switches on physical parametrizations related to the impact of gravity waves (orographic and non-orographic) 03/12/2021 [[Category:WhatIs]] [[Category:Inputs]] c6b5333d26405ea3667abe2a0fd7c9c2a6441779 162 161 2021-12-03T08:34:31Z Emillour 3 wikitext text/x-wiki The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most often in the "vert.def" (or sometimes "gcm.def") file, as it is strongly linked to the model vertical resolution Setting '''ok_strato=y''' is recommended in most cases as it implies: * Some impact on the vertical discretization (i.e. where the model levels are placed) * Some switches on physical parametrizations related to the impact of gravity waves (orographic and non-orographic) Running with '''ok_strato=n''' would only be useful and advised if running with simple setups such as with 19 vertical layers (with old ~CMIP3-like physics packages) or for aquaplanets or without physics (in Held&Suarez configuration) 03/12/2021 [[Category:WhatIs]] [[Category:Inputs]] d9c1184eba0a20d5281404d1f4f80ee5b17fc96b WhatIs: The run.def input file 0 26 163 52 2021-12-03T13:10:32Z Emillour 3 wikitext text/x-wiki == The run.def input file and its format == The run.def file is a text file that is read at run time by LMDZ (and must thus be present in the same directory as the executable). It contains the values of various parameters that the user can specify (as "key = value", where "key" is a predefined keyword and "value" may be a real, an integer, a string or a logical) and modify depending on the specific simulation that is intended, e.g. the line: <pre> nday = 30 </pre> means that when the GCM will run, it will set parameter nday (the number of days to run) to 30. Any line starting with # is a comment, e.g. <pre> # nday : length of the simulation (in days) </pre> The order in which parameters are given in the run.def file is not important, except if a parameter value is given more than once (not recommended!), then it is the last occurrence that prevails. == *.def files included in run.def == The run.def file can include other files (based on the same format, lines containing "key = value" or comments) using the INCLUDEDEF keyword, e.g.: <pre> INCLUDEDEF=gcm.def </pre> In practice, because there are many parameters that one can set/change, it is good practice to separate related sets of parameters in separate files, e.g.: <pre> INCLUDEDEF=physiq.def INCLUDEDEF=gcm.def INCLUDEDEF=vert.def INCLUDEDEF=orchidee.def INCLUDEDEF=config.def INCLUDEDEF=reprobus.def INCLUDEDEF=guide.def INCLUDEDEF=inca.def </pre> Where * parameters put in run.def are related to the simulations setup (number of days to run, if coupled to an ocean -NEMO- or surface model -ORCHIDEE-, etc.) * physiq.def contains flags related to the physical package parametrizations * gcm.def contains parameters related to the dynamics, horizontal grid and time stepping schemes * vert.def contains parameters related to the vertical grid * config.def contains parameters related to the physical package configuration (outputs specifications, orbital /ozone/ aerosol setup, etc.) * guide.def contains parameters related to nudging * orchidee.def/inca.def/reprobus.def contain parameters related to these models (if they are used) == Reference def files == Reference *.def files are provided in the LMDZ/DefLists directory 02/12/2021 [[Category:WhatIs]] [[Category:inputs]] f6abea952fca822900a8198203d50b503cc1731c HowTo: Run an aquaplanet simulation 0 84 164 2021-12-03T13:55:12Z Emillour 3 Page créée avec « == The aquaplanet configuration == The ''aquaplanet'' configuration is a simpler setup than a usual simulation of the Earth's atmosphere in that idealized initial and boun... » wikitext text/x-wiki == The aquaplanet configuration == The ''aquaplanet'' configuration is a simpler setup than a usual simulation of the Earth's atmosphere in that idealized initial and boundary conditions are used: no topography and imposed surface temperatures over the whole globe (hence the "aqua"). Apart from this, the full physics package is used, just like in a "regular" LMDZ simulation. == aquaplanet parameters == In practice setting up an aquaplanet simulation is simpler as one may start without initial condition files (start.nc and startfi.nc). This requires setting <pre> read_start=n </pre> in run.def In addition one must specify a value of '''iflag_phys''' between 101 and 114 to trigger the aquaplanet mode, e.g. <pre> iflag_phys=101 </pre> This will automatically generate initial conditions and trigger the generation of a '''limit.nc''' file adapted to the aquaplanet setup. The values of surface temperature that will be put in the limit.nc file depend on '''iflag_phys''' (see routines ''iniaqua'' and ''profil_sst'' in libf/phylmd/phyaqua_mod.F90). == Good to know == Note that to continue an aquaplanet simulation (i.e. using restart.nc and restartphy.nc files from a previous aquaplanet simulation) one should revert iflag_phys to 1. 03/12/2021 [[Category:HowTo]] d0b695495571b271422766b600fa720f823e5807 WhatIs: The XIOS library 0 76 165 148 2021-12-03T14:35:22Z Emillour 3 wikitext text/x-wiki The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated. To compile with XIOS enabled, one must specify the option -io xios to the makelmdz_fcm script. In addition the flag ok_all_xml=y should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur. == XIOS output controls == All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory. In a nutshell: * the master file read by XIOS is ''iodef.xml''; and contains specific XIOS parameters such as ''using_server'' to dictate whether XIOS is run in client-server mode (true) or attached (false) mode, ''info_level'' to set the verbosity of XIOS messages (0: none, 100: very verbose), ''print_file'' to set whether XIOS messages will be sent to standard output (false) or dedicated xios_*.out and xios_*.err files. <pre> <variable id="using_server" type="bool">false</variable> <variable id="info_level" type="int">0</variable> <variable id="print_file" type="bool"> false </variable> </pre> * It is common practice to have LMDZ-related definitions and outputs in separate XML files, e.g. ''context_lmdz.xml'' which are included in ''iodef.xml'' via the ''src'' attribute, e.g. <pre> <context id="LMDZ" src="./context_lmdz.xml"/> </pre> The ''context_lmdz.xml'' file must then contain all fields/grid/file output definitions (which may be split into multiple XML files). 20/11/2021 [[Category:WhatIs]] [[Category:Xios]] 5de258ea990d8b964eb5bf0af295679d9145ef7f 166 165 2021-12-03T14:36:18Z Emillour 3 wikitext text/x-wiki The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated. To compile with XIOS enabled, one must specify the option -io xios to the makelmdz_fcm script. In addition the flag ok_all_xml=y should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur. == XIOS output controls == All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory. In a nutshell: * the master file read by XIOS is ''iodef.xml''; and contains specific XIOS parameters such as ''using_server'' to dictate whether XIOS is run in client-server mode (true) or attached (false) mode, ''info_level'' to set the verbosity of XIOS messages (0: none, 100: very verbose), ''print_file'' to set whether XIOS messages will be sent to standard output (false) or dedicated xios_*.out and xios_*.err files (true). <pre> <variable id="using_server" type="bool">false</variable> <variable id="info_level" type="int">0</variable> <variable id="print_file" type="bool"> false </variable> </pre> * It is common practice to have LMDZ-related definitions and outputs in separate XML files, e.g. ''context_lmdz.xml'' which are included in ''iodef.xml'' via the ''src'' attribute, e.g. <pre> <context id="LMDZ" src="./context_lmdz.xml"/> </pre> The ''context_lmdz.xml'' file must then contain all fields/grid/file output definitions (which may be split into multiple XML files). 20/11/2021 [[Category:WhatIs]] [[Category:Xios]] 2c98fbb8084c2c475fa59401e600d37df642e115 WhatIs: The install lmdz.sh script 0 85 167 2021-12-03T14:59:41Z Emillour 3 Page créée avec « The ''install_lmdz.sh'' script is a Bash script that aims at being an "installer" for LMDZ of Linux machines. In practice it runs a succession of mandatory steps to insta... » wikitext text/x-wiki The ''install_lmdz.sh'' script is a Bash script that aims at being an "installer" for LMDZ of Linux machines. In practice it runs a succession of mandatory steps to install and run the model from scratch, namely: * Download and install required libraries (NetCDF, IOIPSL and possibly XIOS) * Download the source code (LMDZ and ORCHIDEE), compile it and run a test (bench) simulation It has many options and features; a good starting point (short of reading and digesting the Bash script itself) is to run '''install_lmdz.sh -h''' to learn about these, which should yield something like: <pre> install_lmdz.sh ./install_lmdz.sh [ -v version ] [ -r svn_release ] [ -parallel PARA ] [ -d GRID_RESOLUTION ] [ -bench 0/1 ] [-name LOCAL_MODEL_NAME] [-gprof] [-opt_makelmdz] [-rad RADIATIF] -v "version" like 20150828.trunk see http://www.lmd.jussieu.fr/~lmdz/Distrib/LISMOI.trunk -r "svn_release" : either the svn release number or "last" -compiler gfortran|ifort|pgf90 (default: gfortran) -parallel PARA : can be mpi_omp (mpi with openMP) or none (for sequential) -d GRID_RESOLUTION should be among the available benchs if -bench 1 among which : 48x36x19, 48x36x39 if wanting to run a bench simulation in addition to compilation default : 48x36x19 -bench activating the bench or not (0/1). Default 1 -name LOCAL_MODEL_NAME : default = LMDZversion.release -netcdf PATH : full path to an existing installed NetCDF library (without -netcdf: also download and install the NetCDF library) -xios also download and compile the XIOS library (requires the NetCDF4-HDF5 library, also installed by default) (requires to also have -parallel mpi_omp) -gprof to compile with -pg to enable profiling with gprof -cosp to run without our with cospv1 or cospv2 [none/v1/v2] -rad RADIATIF can be old, rrtm or ecrad radiatif code -nofcm to compile without fcm -SCM install 1D version automatically -debug compile everything in debug mode -opt_makelmdz to call makelmdz or makelmdz_fcm with additional options -physiq to choose which physics package to use -env_file specify an arch.env file to overwrite the existing one -veget surface model to run [NONE/CMIP6/xxxx] </pre> Note that the ''install_lmdz.sh'' script is not the only way to install LMDZ; one can manually do the various key steps (quite possibly adapted to the specificities of the machine that is used). 02/12/2021 [[Category:WhatIs]] 5973e818c9eb0835c79222e946e59c17bfb83345 The vertical discretization in LMDZ 0 86 168 2021-12-03T15:27:39Z Emillour 3 Page créée avec « LMDZ model levels are hybrid sigma-pressure coordinates. There are many ways to define the vertical distribution of model layers via the def files. In practice the relate... » wikitext text/x-wiki LMDZ model levels are hybrid sigma-pressure coordinates. There are many ways to define the vertical distribution of model layers via the def files. In practice the related parameters are set in the ''vert.def'' (which is included in the ''run.def'' file). The master parameter being ''vert_sampling'' (string) which can be set to: * vert_sampling=strato_custom : a highly customizable setup for stratospheric extensions * vert_sampling=strato : a default for stratospheric extensions * vert_sampling=sigma : make model levels (automatically generated) purely sigma levels * vert_sampling=tropo : a default for tropospheric simulations * vert_sampling = read : read ap() and bp(), the auxiliary hybrid coordinate coefficients, from file “hybrid.txt” == Friendly advice == Typically you don't need to mess with the vertical discretization, the provided defaults (see files in DefLists) should match your need. If you really want to dive into this, then you should check out routine libf/dyn3d_common/disvert.F90 03/12/2021 [[Category:Inputs]] e4176716a0f47d4b01b68ab1474997f0bb7402ae 169 168 2021-12-03T15:38:13Z Emillour 3 wikitext text/x-wiki LMDZ model levels are hybrid sigma-pressure coordinates. This means that the pressure P of a model level is a function of surface pressure PS (which varies with time) and fixed predefined time-independent hybrid coordinates ap() and bp(): <pre> P(level,time) = ap(level) + bp(level) . Ps (time) </pre> Near the surface ap() is negligible and <pre> P(level,time) ~ bp(level) . Ps (time) </pre> and thus model levels are essentially sigma levels there. Going to higher altitudes, bp() goes to zero and the bp().Ps term becomes negligible and then <pre> P(level,time) ~ ap(level) </pre> and thus model levels tend to be purely pressure levels there. == definition of the vertical distribution == There are many ways to define the vertical distribution of model layers via the def files. In practice the related parameters are set in the ''vert.def'' (which is included in the ''run.def'' file). The master parameter being ''vert_sampling'' (string) which can be set to: * vert_sampling=strato_custom : a highly customizable setup for stratospheric extensions * vert_sampling=strato : a default for stratospheric extensions * vert_sampling=sigma : make model levels (automatically generated) purely sigma levels * vert_sampling=tropo : a default for tropospheric simulations * vert_sampling = read : read ap() and bp(), the auxiliary hybrid coordinate coefficients, from file “hybrid.txt” == Friendly advice == Typically you don't need to mess with the vertical discretization, the provided defaults (see files in DefLists) should match your need. If you really want to dive into this, then you should check out routine libf/dyn3d_common/disvert.F90 03/12/2021 [[Category:Inputs]] bbdf8d8e12dd0cd8a3a761adc3c1b8a24563cbf3 WhatIs: The limit.nc file 0 87 170 2021-12-03T15:49:58Z Emillour 3 Page créée avec « The ''limit.nc'' file is a NetCDF input file that is read by LMDZ at run-time. It contains the model's boundary conditions such as the fractions of land/ocean/land ice /s... » wikitext text/x-wiki The ''limit.nc'' file is a NetCDF input file that is read by LMDZ at run-time. It contains the model's boundary conditions such as the fractions of land/ocean/land ice /sea ice, albedo of the surface, surface roughness value, sea surface temperature, etc. These fields are on the same physics grid than LMDZ and given for every day of the year. == Good to know == * Since the ''limit.nc'' file is on the same grid as the physics, a given ''limits.nc'' file is only valid for a given model horizontal resolution. * Typically the ''limit.nc'' file is generated at the sough resolution using the '''ce0l''' main program (compiled at the same resolution as the GCM, obviously). 03/12/2021 [[Category:WhatIs]] 7192e3ea5a03584fea5d4852cb7ef94d08b1e271 Calendars 0 88 171 2021-12-03T16:20:36Z Emillour 3 Page créée avec « LMDZ can run using various calendars. The choice of calendar is set using the ''calend'' parameter (string) in the ''run.def'' file, which may be set to: * calend=earth_3... » wikitext text/x-wiki LMDZ can run using various calendars. The choice of calendar is set using the ''calend'' parameter (string) in the ''run.def'' file, which may be set to: * calend=earth_360d (default value if ''calend'' is not set) : years of 360 days (12 months of 30 days each) * calend=earth_365d : years of 365 days (12 months of varying length; 28 days in February every year) * calend=earth_366d : real gregorian year of 365 or 366 days with leap years * calend=gregorian : same as earth_366d The default behavior of the model is to use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation). But the user may reset the date via the following flag: * raz_date=1 (default is 0, i.e. no calendar reset, continue from date read in the start file) : reset the calendar If resetting the calendar then the user should also provide in ''run.def'' : * anneeref=... : calendar year (default=1998; why not? have to start somewhere...) * dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year) * starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight) 03/12/2021 [[Category:Inputs]] 37486801f274169ac261cc31e9f95acc45a43629 Some pointers about running LMDZ in parallel 0 89 172 2021-12-07T15:16:42Z Emillour 3 Page créée avec « Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as oppose... » wikitext text/x-wiki Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as opposed to on a cluster or national center (surc as IDRIS or CCRT or CINES) where many tools and libraries are available. The first step is of course to have the model installed on your Linux machine, which should be relatively easy using the ''install_lmdz.sh'' script launched with appropriate option, e.g. <pre> ./install_lmdz.sh -parallel mpi_omp </pre> If unfortunately the script fails, you might need to make some adjustments and generate your own NetCDF or IPSL libraries and/or your own ''arch'' files. == Compiling and running in MPI only == A prerequisite is (obviously) to have an MPI library at hand (e.g. MPICH, OpenMPI, etc.). Also having a BLAS library at hand, although not mandatory, is recommended. If the ''install_lmdz.sh'' script ran fine (with the ''-parallel mpi_omp'' option, then this is clearly the case. Assuming that ''mpif90'' points to the MPI wrapper (to gfortran) , that the MPI library is installed in ''/my/mpi/directory/lib'', that related files to include (mpi.h) are in directory ''/my/mpi/directory/include'', that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER /my/mpi/directory/bin/mpif90 %LINK /my/mpi/directory/bin/mpif90 %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD -L/my/mpi/directory/lib -lmpi %OMP_LD </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel mpi ...... </pre> To then run LMDZ on N=4 processors would require running the command: <pre> /my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e </pre> Note that prior to running you might need to update your ''LD_LIBRARY_PATH'' environment variable to include the path to your MPI/NetCDF/BLAS libraries, especially if these are locate in non-standard paths. Note also that if you are using the IOIPSL library, then output files will be split into as many files as processors were used and should be recombined into a single file using the IOIPSL ''rebuild'' utility. == Compiling and running in OpenMP only == Assuming that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER gfortran %LINK gfortran %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS -fopenmp -fcray-pointer %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD %OMP_LD -fopenmp </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel omp ...... </pre> To then run LMDZ using X=4 tasks would require running the commands: <pre> export OMP_NUM_THREADS=4 export OMP_STACKSIZE=200M ./gcm_32x32x39_phylmd_para_mem.e </pre> Note that to avoid memory issues (which can easily arrive in OpenMP as separate tasks need some private memory to store their variables, which is defined by the ''OMP_STACKSIZE=...'' environment variable) it is strongly recommended to have as much stack available as possible. Which in practice means setting: <pre> ulimit -s unlimited </pre> prior to running (and in practice this can be put in your .bashrc or .bash_profile file to be always set this way). == Compiling and running in mixed MPI/OpenMP == All that is mentionned above about MPI and OpenMP applies. An example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER /my/mpi/directory/bin/mpif90 %LINK /my/mpi/directory/bin/mpif90 %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS -fopenmp -fcray-pointer %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD -L/my/mpi/directory/lib -lmpi %OMP_LD -fopenmp </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel mpi_omp ...... </pre> To then run LMDZ using N=4 MPI processes with X=2 tasks each (i.e.using N*X=8 cores overall) would require running the commands: <pre> export OMP_NUM_THREADS=2 export OMP_STACKSIZE=200M /my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e </pre> 06/12/2021 [[Category:Parallel]] 41ba78322376f350fb654816529b55d8934df963 173 172 2021-12-07T15:29:47Z Emillour 3 wikitext text/x-wiki Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as opposed to on a cluster or national center (surc as IDRIS or CCRT or CINES) where many tools and libraries are available. The first step is of course to have the model installed on your Linux machine, which should be relatively easy using the ''install_lmdz.sh'' script launched with appropriate option, e.g. <pre> ./install_lmdz.sh -parallel mpi_omp </pre> If unfortunately the script fails, you might need to make some adjustments and generate your own NetCDF or IOIPSL libraries and/or your own ''arch'' files. What follows assumes that necessary libraries have been correctly built and are available. The focus here is on generating appropriate arch.fcm files and then compiling and running the GCM. == Compiling and running in MPI only == A prerequisite is (obviously) to have an MPI library at hand (e.g. MPICH, OpenMPI, etc.). Also having a BLAS library at hand, although not mandatory, is recommended. If the ''install_lmdz.sh'' script ran fine (with the ''-parallel mpi_omp'' option, then this is clearly the case. Assuming that ''mpif90'' points to the MPI wrapper (to gfortran) , that the MPI library is installed in ''/my/mpi/directory/lib'', that related files to include (mpi.h) are in directory ''/my/mpi/directory/include'', that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER /my/mpi/directory/bin/mpif90 %LINK /my/mpi/directory/bin/mpif90 %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD -L/my/mpi/directory/lib -lmpi %OMP_LD </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel mpi ...... </pre> To then run LMDZ on N=4 processors would require running the command: <pre> /my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e </pre> Note that prior to running you might need to update your ''LD_LIBRARY_PATH'' environment variable to include the path to your MPI/NetCDF/BLAS libraries, especially if these are locate in non-standard paths. Note also that if you are using the IOIPSL library, then output files will be split into as many files as processors were used and should be recombined into a single file using the IOIPSL ''rebuild'' utility. == Compiling and running in OpenMP only == Assuming that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER gfortran %LINK gfortran %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS -fopenmp -fcray-pointer %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD %OMP_LD -fopenmp </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel omp ...... </pre> To then run LMDZ using X=4 tasks would require running the commands: <pre> export OMP_NUM_THREADS=4 export OMP_STACKSIZE=200M ./gcm_32x32x39_phylmd_para_mem.e </pre> Note that to avoid memory issues (which can easily arrive in OpenMP as separate tasks need some private memory to store their variables, which is defined by the ''OMP_STACKSIZE=...'' environment variable) it is strongly recommended to have as much stack available as possible. Which in practice means setting: <pre> ulimit -s unlimited </pre> prior to running (and in practice this can be put in your .bashrc or .bash_profile file to be always set this way). == Compiling and running in mixed MPI/OpenMP == All that is mentionned above about MPI and OpenMP applies. An example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER /my/mpi/directory/bin/mpif90 %LINK /my/mpi/directory/bin/mpif90 %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS -fopenmp -fcray-pointer %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD -L/my/mpi/directory/lib -lmpi %OMP_LD -fopenmp </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel mpi_omp ...... </pre> To then run LMDZ using N=4 MPI processes with X=2 tasks each (i.e.using N*X=8 cores overall) would require running the commands: <pre> export OMP_NUM_THREADS=2 export OMP_STACKSIZE=200M /my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e </pre> 06/12/2021 [[Category:Parallel]] fc9032a6b079cfdd0e82d251845923fe71ea0927 HowTo: Get the list of variables that can be outputed 0 90 174 2021-12-13T08:28:47Z Emillour 3 Page créée avec « == Variables to output == Whether using IOIPSL or XIOS, getting a given variable to be outputed in one of the output files requires that its name (or id) is known. == The... » wikitext text/x-wiki == Variables to output == Whether using IOIPSL or XIOS, getting a given variable to be outputed in one of the output files requires that its name (or id) is known. == The list of model variables that can be written to an output file == In the ''DefLists'' subdirectory of LMDZ is the file '''field_def_lmdz.xml''' which you can browse through to identify variables. e.g.: <pre> <field_group id="fields_2D" grid_ref="grid_glo"> ... <field id="psol" long_name="Surface Pressure" unit="Pa" /> ... </field_group> <field_group id="fields_3D" grid_ref="grid_glo_presnivs" > ... <field id="vitu" long_name="Zonal wind" unit="m/s" /> ... </field_group> </pre> Thus, variable "psol" is the surface pressure (in Pa), variable "vitu" is the zonal wind (in m/s), etc. that you can get in output files. 13/12/2021 [[Category:HowTo]] edec654d367947dd70ff8171fc6bc8232edb2436 LMDZ zoom parameters 0 77 175 153 2021-12-13T08:39:24Z Emillour 3 wikitext text/x-wiki The "Z" in LMDZ stands for "Zoom". This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes. == Zoom parameters == In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def): * The zoom center coordinates (in degrees), ''clon'' and ''clat'' * The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it. * The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude * The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 or even 10 can also work. * It is advised to target, by adjusting number of points along longitude and latitude, to have something close to a "square" mesh (i.e. same extension, in degrees, along longitudes and latitudes) in the inner zoomed area. == Choosing an adequate time step for a zoomed simulation == The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid): day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy) It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]] 24/11/2021 [[Catégorie:Zoom]] 478c6c7a807abb507b8841040a8bede367aa87eb XIOS: Error due to too many variables in an output file 0 91 176 2021-12-13T10:20:06Z Emillour 3 Page créée avec « == The Symptom == If LMDZ (with XIOS) crashes with the following error message: <pre> terminate called after throwing an instance of 'xios::CNetCdfException' what(): Err... » wikitext text/x-wiki == The Symptom == If LMDZ (with XIOS) crashes with the following error message: <pre> terminate called after throwing an instance of 'xios::CNetCdfException' what(): Error when calling function nc_enddef(ncId) NetCDF: HDF error Unable to end define mode of this file, given its id: 65536 Program received signal SIGABRT: Process abort signal. </pre> This is most likely due to having increased the output level of an output file and asking for too many variables. This error is actually not due to XIOS but to the NetCDF4+HDF5 library when trying to write in parallel in a file. For some obscure reason when generating the header's metadata (containing information on all fields in the file) an error is generated in ''nc_enddef'' (finalisation of the header of the NetCDF file). == Some Workarounds == * Output less variables (i.e. decrease the output level of the file and/or increase the output level of variables not needed in the outputs) * use the serial version which seems to work : use only one process or a single XIOS server or use two levels of servers (as these, in the end, write in serial) * use the PnetCDF (classical format) library instead of the NetCDF4+HDF5 library Hopefully someday this NetCDF4+HDF5 bug in the library will be fixed... 13/12/2021 [[Category:ErrorMessages]] [[Category:xios]] f265f04b95ef9321539652b855be4f4b236efbca WhatIs : The use filtre fft parameter 0 75 177 147 2021-12-13T10:32:08Z Emillour 3 wikitext text/x-wiki == The longitudinal filter == To minimize stability issues due to grid size diminishing as the pole is approached, some filtering is applied to remove short wavelength (high frequency) structures along longitudes. This operation can be summarized as maintaining an effective grid resolution (along a longitude circle) to that existing at latitudes +/-60° where the longitudinal geometrical resolution is halmf of that at the equator. == the use_filtre_fft parameter == In practice the filtering along a longitude circle of N points requires computations with a cost of the order of N*N. And this is the default behavior in the code. It is however possible to do the same work using efficient FFT (Fast Fourier Transform) operations, which cost less (somethings of the order of N*log(N) operations). In fact the larger N is, the more advantageous it is to use the FFT for filtering. To activate the FFT filtering, just set <pre> use_filtre_fft=y </pre> in your run.def file. Note that the FFT filtering is only implemented in the parallel dynamical core and not the serial one. 22/11/2021 [[Category:WhatIs]] [[Category:inputs]] 1af9add19f9df0d1216200cf2f506a8bf39401c5 Tiedke and iflag cldcon 0 12 178 22 2021-12-14T10:15:51Z Emillour 3 wikitext text/x-wiki The Tiedke convection scheme (ref?) has been superseded by more advanced schemes (the "new physics"). It is however still possible to run LMDZ with it. To run with Tiedke's convection scheme, one must set (in physiq.def) <pre> iflag_con=2 </pre> In addition one must then specify a value of -2 or -1 to companion flag ''iflag_cldcon'' (also in physiq.def): <pre> iflag_cldcon=-2 </pre> ''iflag_cldcon=-2'' gives a better representation of low clouds radiative effect over the tropical oceans than ''iflag_cldcon=-1''. 14/12/2021 [[Category:Inputs]] 2308679e055442f6fc002dfa1e60f00efb63802a Whatis: the libf directory 0 69 179 131 2021-12-14T10:21:10Z Emillour 3 wikitext text/x-wiki The LMDZ source Fortran code is located under the libf directory of the root LMDZ directory. The various directories (and their respective subdirectories) are there to separate codes with various functionalities. The main driver in this organization is to cleanly separate dynamics, physics and their interface. In practice: == dynamics solver related subdirectories == '''dyn3d''' : dynamics, serial version '''dyn3dpar''' : dynamics, parallel version. Obsolete (many arrays remained global requiring more overall memory with increasing core number) '''dyn3dmem''' : dynamics, parallel (optimized) version with improved memory management (all arrays are local to each core) '''dyn3d_common''' : routines used by all dynamics (serial or parallel) '''filtre''' : high-latitude longitudinal filter for lonxlat grid (used by the dynamics, serial or parallel) '''grid''' : routine for model's grid generation (used by the dynamics, serial or parallel) == physics packages related subdirectories == '''phy*''' : various physics packages: - phylmd: standard terrestrial lmd physics - phylmdiso: version with isotopes (temporary, should be merged in phylmd) - phymar: physics of the 'modele atmospherique regional', obsolete - phydev: 'physics that does nothing but does it well' '''phy_common''' : common routines to all physics (different modules for parallelism, abort_physics, geometry, getin wrapper, ...) == physics-dynamics interface == '''dynphy_lonlat''': contains the dynamics/physics interface with at a first level common routines to all physics and dedicated specific routines for each physics (e.g., call physics + physics initialization) in a subdirectory of the same name as the physics package's (phylmd, phydev, ...). In addition the subdirectory stores main programs, other than the gcm, which require access to both physics and dynamics routines (e.g. to generate initial states, such as ce0l). Note that if a physics package name is an extension of an already existing physics package (e.g. phylmdiso and phylmd) then they share the same interface (phylmd here). '''phy*/dyn1d''': the 1D model (and links to some required dyn3d/* routines) == others == '''misc''': (misceallenous) dynamics and physics independent routines which can be used by either but rely on neither (e.g. random number generator, tridiagonal matrix solver, NetCDF function wrappers, CRAY-specific routines, ...) '''obsolete''': obsolete code not used anymore but moved and stored here for an easy quick look. 14/10/2021 [[Category:WhatIs]] 7c8b1f5d2b3ab74c7f75073ae75022794e74f6fb HowTo: Set the value of the solar constant 0 92 180 2021-12-14T10:37:22Z Emillour 3 Page créée avec « == The solar constant == The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun == Changing/setting the solar consta... » wikitext text/x-wiki == The solar constant == The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun == Changing/setting the solar constant == This is an input that can be changed by setting the appropriate flag ''solaire'' (French for "solar") in config.def, e.g.: <pre> solaire=1366.0896 </pre> '''Important''': This will only be taken into account if running without the RRTM radiative transfert scheme, i.e. with <pre> iflag_rrtm=0 </pre> If using RRTM then the ''solaire'' parameter is ignored as the solar constant is read from a specific input file (SOLARVOLCANOES.txt ?) unless <pre> ok_suntime_rrtm=n </pre> 14/12/2021 [[Category:inputs]] 1887784733061c75ff58dcc51da08124b766ad7f 181 180 2021-12-14T10:39:28Z Emillour 3 wikitext text/x-wiki == The solar constant == The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun == Changing/setting the solar constant == This is an input that can be changed by setting the appropriate flag ''solaire'' (French for "solar") in config.def, e.g.: <pre> solaire=1366.0896 </pre> '''Important''': This will always be taken into account if running without the RRTM radiative transfert scheme, i.e. with <pre> iflag_rrtm=0 </pre> If using RRTM then the ''solaire'' parameter is ignored as the solar constant is read from a specific input file (SOLARVOLCANOES.txt ?) unless <pre> ok_suntime_rrtm=n </pre> 14/12/2021 [[Category:inputs]] 46d6b76c77466cdc1fbee68dc578296cc5e91e41 182 181 2021-12-14T10:40:14Z Emillour 3 wikitext text/x-wiki == The solar constant == The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun == Changing/setting the solar constant == This is an input that can be changed by setting the appropriate flag ''solaire'' (French for "solar") in config.def, e.g.: <pre> solaire=1366.0896 </pre> '''Important''': This will always be taken into account if running without the RRTM radiative transfert scheme, i.e. with <pre> iflag_rrtm=0 </pre> If using RRTM (i.e. ''iflag_rrtm=1'') then the ''solaire'' parameter is ignored as the solar constant is read from a specific input file (SOLARVOLCANOES.txt ?) unless <pre> ok_suntime_rrtm=n </pre> 14/12/2021 [[Category:inputs]] 56e2591fefb6a56cf472d095b6e8413e0d156873 WhatIs: The DefLists directory 0 93 183 2021-12-14T11:07:22Z Emillour 3 Page créée avec « == the DefLists directory== The '''DefLists''' subdirectory of the ''LMDZ'' main directory contains examples of input text files used by the GCM such as: * sample "def" f... » wikitext text/x-wiki == the DefLists directory== The '''DefLists''' subdirectory of the ''LMDZ'' main directory contains examples of input text files used by the GCM such as: * sample "def" files containing switches and parameters read at run-time by LMDZ * sample "xml" files used by XIOS to control its outputs * various other simple text files which may be needed by dedicated parametrizations or options == Worth knowing == Only simple text files are provided in this directory. There are other inputs read in by the model (e.g. start.nc or limit.nc NetCDF files) which are not distributed with the source code. 14/12/2021 cc9f379491f49730ba035a933caa7184cedcfb80 184 183 2021-12-14T11:08:03Z Emillour 3 wikitext text/x-wiki == the DefLists directory== The '''DefLists''' subdirectory of the ''LMDZ'' main directory contains examples of input text files used by the GCM such as: * sample "def" files containing switches and parameters read at run-time by LMDZ * sample "xml" files used by XIOS to control its outputs * various other simple text files which may be needed by dedicated parametrizations or options == Worth knowing == Only simple text files are provided in this directory. There are other inputs read in by the model (e.g. start.nc or limit.nc NetCDF files) which are not distributed with the source code. 14/12/2021 [[Category:WhatIs]] 04219a9719ad32fafbecb639c0db5f61cac432c6 Nudging in LMDZ 0 94 185 2021-12-14T16:00:07Z Emillour 3 Page créée avec « == The concept == Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given ti... » wikitext text/x-wiki == The concept == Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 aed4dcd008011026c842d938184517409249898f 204 185 2022-03-28T08:57:51Z Lfairhead 1 wikitext text/x-wiki == The concept == Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Guidage]] 537a201bbcf2cd6d455715d0a3889e4423418b79 205 204 2022-03-28T09:05:00Z Lfairhead 1 wikitext text/x-wiki == The concept == Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Guidage]][[Category:Nuging]] fb149aaad14582788f5cf526c9c46d1cc35c8fcb 206 205 2022-03-28T09:05:52Z Lfairhead 1 wikitext text/x-wiki == The concept == Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Guidage]][[Category:Nuging]][[Category:Guidage/Nuging]] b94705a053447e1c66f299f81caa641f76595ad6 Discussion utilisateur:Ionela 3 95 186 2022-03-10T14:30:13Z Ionela 5 /* HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ */ nouvelle section wikitext text/x-wiki == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == LMDZ utilise des niveaux hybrides sigma-pression sur la verticale. Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur ces niveaux hybrides sigma-pression. La variable "pres" contient les valeurs de pression sur chaque niveau hybride. Pour reconstituer les vrais niveaux de pression du modele "true_presnivs", il faut utiliser les coefficients ap et bp, ainsi que la pression a la surface appellée ici "preff". Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par: DO l = 1, klev true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff ) ENDDO avec klev=79. Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors : DO l = 1, klev true_presnivs(l) = ap(l)+bp(l)*preff ENDDO La pression à la surface preff est également une variable 4D et est a priori incluse dans les fichiers 4D ( comme ta*.nc, ua*.nc, va*.nc, etc). b115b5c80c47d3bf2b111d5e9ffd01d427a50271 187 186 2022-03-10T14:41:00Z Ionela 5 wikitext text/x-wiki == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression. La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps. Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" ( qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps ) et la pression à la surface pour calculer la pression sur la verticale. Lorsque les variables "pres" ou "geop" ne sont pa disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, variable appellée ici "preff". Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par: DO l = 1, klev true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff ) ENDDO avec klev=79. Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors : DO l = 1, klev true_presnivs(l) = ap(l)+bp(l)*preff ENDDO La pression à la surface preff est également une variable 4D et est a priori incluse dans les fichiers 4D ( comme ta*.nc, ua*.nc, va*.nc, etc). 7d5f143018cced2f2783f7a9be73a35023cb928f 188 187 2022-03-10T14:42:38Z Ionela 5 wikitext text/x-wiki == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression. La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps. Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale. Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff". Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par: DO l = 1, klev true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff ) ENDDO avec klev=79. Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors : DO l = 1, klev true_presnivs(l) = ap(l)+bp(l)*preff ENDDO La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc). 10f0f60649a22d438d0009c01615fc5ba2f2126c HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ 0 96 189 2022-03-10T14:58:23Z Ionela 5 Page créée avec « == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur... » wikitext text/x-wiki == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression. La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps. Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale. Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff". Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par: DO l = 1, klev true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff ) ENDDO avec klev=79. Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors : DO l = 1, klev true_presnivs(l) = ap(l)+bp(l)*preff ENDDO La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc). 10f0f60649a22d438d0009c01615fc5ba2f2126c 190 189 2022-03-10T15:01:42Z Ionela 5 wikitext text/x-wiki == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression. La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps. Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale. Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff". Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par: DO l = 1, klev true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff ) ENDDO avec klev=79. Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors : DO l = 1, klev true_presnivs(l) = ap(l)+bp(l)*preff ENDDO La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc). [[Category:HowTo]] a2a174279c6d7110432ba84c7a24485ba61b94aa 191 190 2022-03-10T15:10:57Z Ionela 5 wikitext text/x-wiki == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression. La variable 4D (x, y, z, t) "pres" contient les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps. Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale. Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff". Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par: DO l = 1, klev true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff ) ENDDO avec klev=79. Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors : DO l = 1, klev true_presnivs(l) = ap(l)+bp(l)*preff ENDDO La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc). [[Category:HowTo]] 5aead707efb11195a5d34ff986dd95d67f7cb063 HowTo: Calculating the true pressure from the hybrid sigma-pressure levels of LMDZ 0 97 192 2022-03-10T15:15:30Z Ionela 5 Page créée avec « == HowTo: Calculating the true pressure from the hybrid sigma-pressure levels of LMDZ == The 4D variables (x,y,z,t) of LMDZ, such as ta, ua, va, etc are output on hybrid... » wikitext text/x-wiki == HowTo: Calculating the true pressure from the hybrid sigma-pressure levels of LMDZ == The 4D variables (x,y,z,t) of LMDZ, such as ta, ua, va, etc are output on hybrid sigma-pressure levels. The 4D variable (x,y,z,t) "pres" contains the pressure values of each mesh for each vertical level and time step. When "pres" is not available, we can use the "geop" variable (which corresponds to the geopotential of each mesh for each vertical level and time step) and the surface pressure to calculate the pressure on the vertical. When the "pres" or "geop" variables are not available, the true pressure levels of the "true_presnivs" model can be reconstructed, using the ap and bp coefficients and the surface pressure, called "preff" here. In the situation where the variables ap and bp are given at the interfaces of the model (ap and bp are of dimension klevp1=80), we calculate "true_presnivs" by: DO l = 1, klev true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff ) ENDDO with klev=79. In the case where ap and bp are given at the middles of the layers (with ap and bp of dimension klev), then : DO l = 1, klev true_presnivs(l) = ap(l)+bp(l)*preff ENDDO The surface pressure "preff" is also a 4D variable and is a priori included in the 4D files (like ta*.nc, ua*.nc, va*.nc, etc). [[Category:HowTo]] 68af002bac35a768fa7e3888fadc74df770d9860 Utilisateur:AdellCaesar102 2 98 193 2022-03-12T11:42:03Z AdellCaesar102 6 Page créée avec « Hello! <br>I'm Vietnamese male :). <br>I {really }like College football!<br><br>Feel free to visit my blog post: [https://abnerbosk.com/index.php?title=Hungary_Summons_Ukr... » wikitext text/x-wiki Hello! <br>I'm Vietnamese male :). <br>I {really }like College football!<br><br>Feel free to visit my blog post: [https://abnerbosk.com/index.php?title=Hungary_Summons_Ukrainian_Ambassador_Over_Raids_On_Ethnic_Hungarian... 蒙特 婁 景點] e4d136b77966e05cdde6f8fc1578e8bb089a1219 Utilisateur:KurtD92775808 2 99 194 2022-03-12T13:53:24Z KurtD92775808 7 Page créée avec « My name is Kurt and I am studying Japanese Studies and Business and Management at Dijon / France.<br><br>My web site ... [http://torahtree.com/index.php?title=Yes_Your_Sec... » wikitext text/x-wiki My name is Kurt and I am studying Japanese Studies and Business and Management at Dijon / France.<br><br>My web site ... [http://torahtree.com/index.php?title=Yes_Your_Second_Stimulus_Check_May_Be_Smaller._Here_s_Why asus zenfone ar canada] 1ba6084afa0bc3eb22962a9dbf50301ca181a8bc Utilisateur:MinervaWester42 2 100 195 2022-03-13T12:06:40Z MinervaWester42 10 Page créée avec « I’m Minerva from Kansas City studying Modern Languages and Classics. I did my schooling, secured 82% and hope to find someone with same interests in Nordic skating.<br><... » wikitext text/x-wiki I’m Minerva from Kansas City studying Modern Languages and Classics. I did my schooling, secured 82% and hope to find someone with same interests in Nordic skating.<br><br>Also visit my webpage; [https://iw.faithvisionnetwork.com/8482847-darius-campbell-wiki-5-facts-to-know-about-natasha-henstridges-ex-husband נטשה הנסטרידג] b6603ab76118845a3c39b7c158425d8ffc36e48e Utilisateur:DennisKpd7458609 2 101 196 2022-03-14T03:49:23Z DennisKpd7458609 9 Page créée avec « I'm Bryan and I live with my husband and our 2 children in Knutwil, in the NA south part. My hobbies are RC cars, Dog sport and Squash.<br><br>Here is my page: [http://lul... » wikitext text/x-wiki I'm Bryan and I live with my husband and our 2 children in Knutwil, in the NA south part. My hobbies are RC cars, Dog sport and Squash.<br><br>Here is my page: [http://lulle.sakura.ne.jp/cgi-bin/kemobook/g_book.cgi/a%C3%BFVeronica%C3%BFexternal%20nofollow?sgroup=1 sretna djeca] fe3ea05b20760fe31f9951d28661ae6b5db58847 Utilisateur:IreneYoo848 2 102 197 2022-03-14T07:33:18Z IreneYoo848 11 Page créée avec « Hi, everybody! My name is Irene. <br>It is a little about myself: I live in United States, my city of New York. <br>It's called often Northern or cultural capital of NY. I... » wikitext text/x-wiki Hi, everybody! My name is Irene. <br>It is a little about myself: I live in United States, my city of New York. <br>It's called often Northern or cultural capital of NY. I've married 3 years ago.<br>I have 2 children - a son (Retha) and the daughter (Amee). We all like Bridge.<br><br>Here is my web site - [https://ko.homeappraisalguys.com/8084998-apex-legends-twitch-prime-loot-available-now-heres-how-to-get-it 아마존 apex] de4732d34afeef19f54e1c0fdd4285715c7254e6 Utilisateur:Sommer6313 2 103 198 2022-03-16T15:06:38Z Sommer6313 12 Page créée avec « Im addicted to my hobby Fishkeeping. Seems boring? Not at all!<br>I try to learn French in my spare time.<br><br>Take a look at my website ... [http://22ready.com/index.p... » wikitext text/x-wiki Im addicted to my hobby Fishkeeping. Seems boring? Not at all!<br>I try to learn French in my spare time.<br><br>Take a look at my website ... [http://22ready.com/index.php/User:JoniHdy677044 sharepoint คือ] 6ee4d48ee687ddbc43a2923125af61ed302aec6f WhatIs: The makelmdz fcm script 0 29 199 151 2022-03-21T09:52:59Z Emillour 3 /* The makelmdz_fcm script to compile LMDZ */ wikitext text/x-wiki == The makelmdz_fcm script to compile LMDZ == The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.). To list available options, run "makelmdz_fcm -h", which should return something like: <pre> Usage : makelmdz_fcm [options] -arch nom_arch exec [-h] : brief help [-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19) [-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd) [-prod / -dev / -debug] : compilation mode production (default) / developement / debug [-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false) [-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false) false : no vegetation model orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version) orchidee2.0 : compile using ORCHIDEE 2.0 orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6 true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6 [-chimie INCA/false] : with INCA chemistry model or without (default: false) [-cosp true/false] : compile with/without cosp package (default: false) [-cosp2 true/false] : compile with/without cosp2 package (default: false) [-cospv2 true/false] : compile with/without cospv2 package (default: false) [-inlandsis true/false] : compile with/without inlandsis package (default: false) [-rrtm true/false] : compile with/without rrtm package (default: false) [-rad old/rrtm/ecrad] : compile with old/rrtm/ecrad radiatif code (default: old) [-dust true/false] : compile with/without the dust package by Boucher and co (default: false) [-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false) [-isotopes true/false] : compile with/without water isotopes in the physics [-isoverif true/false] : compile with/without verifications for water isotopes in the physics [-diagiso true/false] : compile with/without special diagnostics for water isotopes in the physics [-isotrac true/false] : compile with/without tracers of water isotopes in the physics [-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp [-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom) [-io ioipsl/mix/xios] : Input/Output library (default: ioipsl) [-include INCLUDES] : extra include path to add [-cpp CPP_KEY] : additional preprocessing definitions [-adjnt] : adjoint model, not operational ... [-mem] : reduced memory dynamics (obsolete flag; always on in parallel mode) [-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez) [-link LINKS] : additional links with other libraries [-j n] : active parallel compiling on ntask [-full] : full recompiling [-libphy] : only compile physics package (no dynamics or main program) [-fcm_path path] : path to the fcm tool (default: tools/fcm/bin) [-ext_src path] : path to an additional set of routines to compile with the model [-arch_path path] : path to architecture files (default: arch) -arch nom_arch : target architecture exec : executable to build </pre> The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD"). == Some extra info about various makelmdz_fcm options == <pre>-d IMxJMxLM</pre> As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers). If compiling the 1D model, then only the number of layers (llm) needs be specified, e.g. <code>-d 78</code> to compile <code>lmdz1d</code>. <pre>-j n</pre> With this option one can speed up compilation by letting <code>make</code> compile simultaneously (and if possible) up to <code>n</code> routines in parallel (note that this "parallel compilation" has nothing to do with the code being compiled for serial or parallel use as specified via option <code>-parallel ...</code>). In practice using <code>-j 8</code> or <code>-j 4</code> works well. <pre>-full</pre> Impose a full cleanup (i.e. removing past object and library files) to ensure recompiling the model from scratch. 21/03/2022 [[Category:WhatIs]] 3b3fc6bcdffe21e827d0cce9e077cfaf167d2821 200 199 2022-03-21T10:43:23Z Emillour 3 wikitext text/x-wiki == The makelmdz_fcm script to compile LMDZ == The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.). To list available options, run "makelmdz_fcm -h", which should return something like: <pre> Usage : makelmdz_fcm [options] -arch nom_arch exec [-h] : brief help [-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19) [-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd) [-prod / -dev / -debug] : compilation mode production (default) / developement / debug [-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false) [-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false) false : no vegetation model orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version) orchidee2.0 : compile using ORCHIDEE 2.0 orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6 true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6 [-chimie INCA/false] : with INCA chemistry model or without (default: false) [-cosp true/false] : compile with/without cosp package (default: false) [-cosp2 true/false] : compile with/without cosp2 package (default: false) [-cospv2 true/false] : compile with/without cospv2 package (default: false) [-inlandsis true/false] : compile with/without inlandsis package (default: false) [-rrtm true/false] : compile with/without rrtm package (default: false) [-rad old/rrtm/ecrad] : compile with old/rrtm/ecrad radiatif code (default: old) [-dust true/false] : compile with/without the dust package by Boucher and co (default: false) [-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false) [-isotopes true/false] : compile with/without water isotopes in the physics [-isoverif true/false] : compile with/without verifications for water isotopes in the physics [-diagiso true/false] : compile with/without special diagnostics for water isotopes in the physics [-isotrac true/false] : compile with/without tracers of water isotopes in the physics [-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp [-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom) [-io ioipsl/mix/xios] : Input/Output library (default: ioipsl) [-include INCLUDES] : extra include path to add [-cpp CPP_KEY] : additional preprocessing definitions [-adjnt] : adjoint model, not operational ... [-mem] : reduced memory dynamics (obsolete flag; always on in parallel mode) [-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez) [-link LINKS] : additional links with other libraries [-j n] : active parallel compiling on ntask [-full] : full recompiling [-libphy] : only compile physics package (no dynamics or main program) [-fcm_path path] : path to the fcm tool (default: tools/fcm/bin) [-ext_src path] : path to an additional set of routines to compile with the model [-arch_path path] : path to architecture files (default: arch) -arch nom_arch : target architecture exec : executable to build </pre> The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD"). == Some extra info about various makelmdz_fcm options == <pre>-d IMxJMxLM</pre> As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers). If compiling the 1D model, then only the number of layers (llm) needs be specified, e.g. <code>-d 78</code> to compile <code>lmdz1d</code>. <pre>-j n</pre> With this option one can speed up compilation by letting <code>make</code> compile simultaneously (and if possible) up to <code>n</code> routines in parallel (note that this "parallel compilation" has nothing to do with the code being compiled for serial or parallel use as specified via option <code>-parallel ...</code>). In practice using <code>-j 8</code> or <code>-j 4</code> works well. <pre>-parallel none/mpi/omp/mpi_omp</pre> This option is to specify whether the model should be compiled in serial mode (default) or in parallel using MPI (<code>mpi</code>) only, or using OpenMP (<code>omp</code>) only, or both MPI and OpenMP (<code>mpi_omp</code>). In practice, one most often needs to run in parallel and using both MPI and OpenMP, so <code>-parallel mpi_omp</code> is advised. <pre>-io ioipsl/mix/xios</pre> This option specifies which IO (Input/Output) library is going to be used by the model. Default is <code>-io ioipsl</code>, which is becoming depreciated for the GCM but mandatory for the 1D model. Note that when compiling with XIOS: <code>-io xios</code> on still needs to also use the IOIPSL library (which handles the reading of the run.def and companion files). <pre>-full</pre> Impose a full cleanup (i.e. removing past object and library files) to ensure recompiling the model from scratch. 21/03/2022 [[Category:WhatIs]] 8e9f1c90cc7ccc6c82f2e10f395c4b5c40b721b8 Création des fichiers de guidage et adaptation de l'exécution 0 51 201 86 2022-03-28T08:44:36Z Lfairhead 1 wikitext text/x-wiki == Créer les fichiers de guidages == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/CONFIG/LMDZOR/branches/LMDZOR_v4/CREATE/SCRIPT 3 => Recuperer les fichiers ERAI non-interpolé 4 => Interpoler avec interp_from_era.ksh. D'abord adapter qq variables en tete du script : gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" : les variables a interpoler outdir= repertoire de resultats first_year=2011 last_year=2011 rundir= repertoire temporaire ./interp_from_era.ksh == Adapter le run == 5 => Crée le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y [[Category:guidage]] [[Category:HowTo]] guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activé.<br/> Temps de relaxation, pour une grille regulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'interieure de la zoom et tau_min à l'exterieur de la zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort..<br/> 6 => Ajouter en tete de run.def la prise en compte de la fichier guide.def : INCLUDEDEF=guide.def 7 => Copier les fichier interpolé u_201101_erai.nc en u.nc et v_201101_erai.nc v.nc dans le repertoire où le modèle sera lancer : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l'execution ./gcm.e > out_guide 2>&1 [[Category:Guidage]] a74e652dc86dc4f94be60890e13b7215f8259996 MediaWiki:Sidebar 8 107 209 2022-04-04T08:39:55Z Lfairhead 1 Page créée avec « * SEARCH * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LAN... » wikitext text/x-wiki * SEARCH * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES 2997065075c386bc05a5a524e473b409a5dade54 210 209 2022-04-04T08:40:33Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * trucmuche * SEARCH * TOOLBOX * LANGUAGES 44e37a14e1bcc5f476186b334b058e45fcf1a622 211 210 2022-04-04T08:41:04Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * LANGUAGES ddc509f5c21f327ed77ff3ca89bb2f7fd5e771a1 212 211 2022-04-04T08:41:34Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH ** trucmuche * TOOLBOX * LANGUAGES 9ba9ff8fa86401aa87629ce1ff3b33646b48d80e 213 212 2022-04-04T08:42:09Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH ** randompage-url|randompage * TOOLBOX * LANGUAGES cdcd772596f06629502c9f4cd2543587959cec74 214 213 2022-04-04T08:42:22Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * search ** randompage-url|randompage * TOOLBOX * LANGUAGES fa31adad81e5149bbd3b2fa4efafa55373193bc8 MediaWiki:Sidebar 8 107 215 214 2022-04-04T08:43:03Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * trucmuch ** mainpage|mainpage-description * search ** randompage-url|randompage * TOOLBOX * LANGUAGES f8032bd3fbe7723480fc5f5e6868b83d7482aeb3 216 215 2022-04-04T08:43:37Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * trucmuch ** mainpage|mainpage-description * SEARCH ** randompage-url|randompage * TOOLBOX * LANGUAGES e77195bd1408ed2ccbf6598792685ac371b5a558 217 216 2022-04-04T08:44:04Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * TRUCMUCH ** mainpage|mainpage-description * SEARCH ** randompage-url|randompage * TOOLBOX * LANGUAGES afd4d88c3e606ba6c8febbffcfb30e4de90a416d 218 217 2022-04-04T08:47:23Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES df7c604d036435a413d00baa4fd183f6a56b1543 ExempleMaths 0 6 219 6 2022-04-06T15:16:30Z Lfairhead 1 wikitext text/x-wiki <!-- some LaTeX macros we want to use: --> $$\newcommand{\Re}{\mathrm{Re}\,} \newcommand{\pFq}[5]{{}_{#1}\mathrm{F}_{#2} \left( \genfrac{}{}{0pt}{}{#3}{#4} \bigg| {#5} \right)}$$ We consider, for various values of $$s$$, the $$n$$-dimensional integral \begin{align} \label{def:Wns} W_n (s) &:= \int_{[0, 1]^n} \left| \sum_{k = 1}^n \mathrm{e}^{2 \pi \mathrm{i} \, x_k} \right|^s \mathrm{d}\boldsymbol{x} \end{align} which occurs in the theory of uniform random walk integrals in the plane, where at each step a unit-step is taken in a random direction. As such, the integral \eqref{def:Wns} expresses the $$s$$-th moment of the distance to the origin after $$n$$ steps. By experimentation and some sketchy arguments we quickly conjectured and strongly believed that, for $$k$$ a nonnegative integer \begin{align} \label{eq:W3k} W_3(k) &= \Re \, \pFq32{\frac12, -\frac k2, -\frac k2}{1, 1}{4}. \end{align} Appropriately defined, \eqref{eq:W3k} also holds for negative odd integers. The reason for \eqref{eq:W3k} was long a mystery, but it will be explained at the end of the paper. <syntaxhighlight lang="fortran"> PROGRAM Truc IMPLICIT NONE DO i = 1, iim DO j = 1, jjm ..... END DO END DO END PROGRAM </syntaxhighlight> 253bae0cac9eb040d0845c6f107175bf82def4c8 XIOS: Saving or loading interpolation weights 0 108 220 2022-04-07T09:44:53Z Emillour 3 Page créée avec « With the XIOS library one can define output domains (grid) which are different from input domains (grids), and XIOS does the necessary interpolation. This requires, once... » wikitext text/x-wiki With the XIOS library one can define output domains (grid) which are different from input domains (grids), and XIOS does the necessary interpolation. This requires, once source and destination grids are known, to compute some interpolation weights (during the initialization step). For large grids, this can take some time. One can however tell XIOS to save the interpolation weights in a file and use that file (if it is present) rather than recompute them when a new simulation is ran. In practice one must add extra keys to the "interpolate_domain" tag, e.g.: <pre> <domain id="dom_256_192" type="rectilinear" ni_glo="256" nj_glo="192" > <generate_rectilinear_domain/> <interpolate_domain order="1" write_weight="true" mode="read_or_compute" /> </domain> </pre> This will automatically generate a NetCDF file containing the weights. Default file name will be something like xios_interpolation_weights_CONTEXT_INPUTDOMAIN_OUTPUTDOMAIN.nc , where CONTEXT, INPUTDOMAIN and OUTPUTDOMAIN are inherited from the context (i.e. definitions of these in the xml files). One can specify the name of the file with the key "weight_filename", e.g. <pre> <domain id="dom_256_192" type="rectilinear" ni_glo="256" nj_glo="192" > <generate_rectilinear_domain/> <interpolate_domain order="1" write_weight="true" mode="read_or_compute" weight_filename="xios_weights" /> </domain> </pre> 07/04/2022 [[Category:Xios]] 86ec9787633d3729ed97546c2cf31f1a8edf6af4 WhatIs: The XIOS library 0 76 221 166 2022-04-08T07:55:36Z Emillour 3 wikitext text/x-wiki The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated. To compile with XIOS enabled, one must specify the option <syntaxhighlight lang="bash"> -io xios </syntaxhighlight> to the makelmdz_fcm script. In addition the flag ok_all_xml=y should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur. == XIOS output controls == All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory. In a nutshell: * the master file read by XIOS is ''iodef.xml''; and contains specific XIOS parameters such as ''using_server'' to dictate whether XIOS is run in client-server mode (true) or attached (false) mode, ''info_level'' to set the verbosity of XIOS messages (0: none, 100: very verbose), ''print_file'' to set whether XIOS messages will be sent to standard output (false) or dedicated xios_*.out and xios_*.err files (true). <syntaxhighlight lang="xml"> <variable id="using_server" type="bool">false</variable> <variable id="info_level" type="int">0</variable> <variable id="print_file" type="bool"> false </variable> </syntaxhighlight> * It is common practice to have LMDZ-related definitions and outputs in separate XML files, e.g. ''context_lmdz.xml'' which are included in ''iodef.xml'' via the ''src'' attribute, e.g. <syntaxhighlight lang="xml"> <context id="LMDZ" src="./context_lmdz.xml"/> </syntaxhighlight> The ''context_lmdz.xml'' file must then contain all fields/grid/file output definitions, which may be split into multiple XML files. Current practice is to use separate ''file_def_histsomething_lmdz.xml'' files, one for each ''histsomething.nc'' file to generate, and include these in ''context_lmdz.xml'' using the ''file_definition'' key. e.g.: <syntaxhighlight lang="xml"> <!-- Define output files Each file contains the list of variables and their output levels --> <file_definition src="./file_def_histday_lmdz.xml"/> <file_definition src="./file_def_histhf_lmdz.xml"/> <file_definition src="./file_def_histins_lmdz.xml"/> <file_definition src="./file_def_histLES_lmdz.xml"/> <file_definition src="./file_def_histmth_lmdz.xml"/> </syntaxhighlight> 08/04/2021 [[Category:WhatIs]] [[Category:Xios]] 956cdda1142d73700162bfbe515a1c830deb6168 HowTo: Using gcov (the GNU coverage tool) with LMDZ 0 109 222 2022-04-28T15:41:02Z Lfairhead 1 Page créée avec « == HowTo: Using the GNU coverage tool gcov with LMDZ == If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU h... » wikitext text/x-wiki == HowTo: Using the GNU coverage tool gcov with LMDZ == If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps: # compiling your code with the right options # running the code to output the statistics that gcov will analyze # running gcov on the data file created in the previous step === Running gcov on LMDZ === We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types os outputs '''''Compiling LMDZ''''' You will need to add the following flags to your compilation flags in the arch.fcm.file: %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path''' '''''Running LMDZ''''' You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step '''''Running gcovr''''' You then launch the gcovr command as gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/ ^ this is where the gcda and gcno files are saved by the compiler to create html files [[Category:HowTo]] a434a2cc1d0591cee7d4174f569c37c8dfb65cef 223 222 2022-04-28T15:41:19Z Lfairhead 1 /* HowTo: Using the GNU coverage tool gcov with LMDZ */ wikitext text/x-wiki If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps: # compiling your code with the right options # running the code to output the statistics that gcov will analyze # running gcov on the data file created in the previous step === Running gcov on LMDZ === We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types os outputs '''''Compiling LMDZ''''' You will need to add the following flags to your compilation flags in the arch.fcm.file: %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path''' '''''Running LMDZ''''' You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step '''''Running gcovr''''' You then launch the gcovr command as gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/ ^ this is where the gcda and gcno files are saved by the compiler to create html files [[Category:HowTo]] b01e978eb58cc56525ce913bdc562da24819c719 224 223 2022-04-29T11:53:05Z Lfairhead 1 wikitext text/x-wiki If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps: # compiling your code with the right options # running the code to output the statistics that gcov will analyze # running gcov on the data files created in the previous step to analyze the code coverage === Running gcov on LMDZ === We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs '''''Compiling LMDZ''''' You will need to add the following flags to your compilation flags in the arch.fcm.file: %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path''' '''''Running LMDZ''''' You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step '''''Running gcovr''''' You then launch the gcovr command as gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/ ^ this is where the gcda and gcno files are saved by the compiler to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file. [[Category:HowTo]] 26329176deeb3af6aa33bb1f9ed25d3e4369d875 225 224 2022-04-29T11:54:29Z Lfairhead 1 wikitext text/x-wiki If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps: # compiling your code with the right options # running the code to output the statistics that gcov will analyze # running gcov on the data files created in the previous step to analyze the code coverage === Running gcov on LMDZ === We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs '''''Compiling LMDZ''''' You will need to add the following flags to your compilation flags in the arch.fcm.file: %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path''' '''''Running LMDZ''''' You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step '''''Running gcovr''''' You then launch the gcovr command as gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/ ^ this is where the gcda and gcno files are saved by the compiler. They're created where the source files were actually compiled to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file. [[Category:HowTo]] 8e2c5e7b7e213eb9f15f38ee5458f891a590aac3 226 225 2022-04-29T11:56:58Z Lfairhead 1 wikitext text/x-wiki If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps: # compiling your code with the right options # running the code to output the statistics that gcov will analyze # running gcov on the data files created in the previous step to analyze the code coverage === Running gcov on LMDZ === We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs '''''Compiling LMDZ''''' You will need to add the following flags to your compilation flags in the arch.fcm.file: %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path''' '''''Running LMDZ''''' You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step '''''Running gcovr''''' You then launch the gcovr command as gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/ ^ this is where the gcda and gcno files are saved by the compiler. They're created where the source files were actually compiled. to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file. You'll find [[https://web.lmd.jussieu.fr/~fairhead/Labo/LMDZ_Coverage/sequential/example-html-details.html here]] an example of the output for the actual LMDZ code. [[Category:HowTo]] 2610e1b7cdb9e8f5827f961a9e8250e64d7a8400 227 226 2022-05-02T08:58:14Z Lfairhead 1 wikitext text/x-wiki If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps: # compiling your code with the right options # running the code to output the statistics that gcov will analyze # running gcov on the data files created in the previous step to analyze the code coverage === Running gcov on LMDZ === We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs '''''Compiling LMDZ''''' You will need to add the following flags to your compilation flags in the arch.fcm.file: %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path''' .... %BASE_LD -Wl,-rpath=/data/fairhead/Test_coverage/LMDZ20211102.trunk/netcdf-4.0.1/lib '''-pg -lgcov''' '''''Running LMDZ''''' You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step '''''Running gcovr''''' You then launch the gcovr command as gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/ ^ this is where the gcda and gcno files are saved by the compiler. They're created where the source files were actually compiled. to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file. You'll find [[https://web.lmd.jussieu.fr/~fairhead/Labo/LMDZ_Coverage/sequential/example-html-details.html here]] an example of the output for the actual LMDZ code. [[Category:HowTo]] 892e0775026dabab357e62b1aef6dd98ffd1f725 Scavenging 0 110 228 2022-05-09T09:30:07Z Lguez 4 Page créée avec « Treatment of large scale scavenging in LMDZ. Various schemes may be used depending on the value of the flag iflag_lscav: iflag_lscav=0 ==> no large scale scavenging... » wikitext text/x-wiki Treatment of large scale scavenging in LMDZ. Various schemes may be used depending on the value of the flag iflag_lscav: iflag_lscav=0 ==> no large scale scavenging iflag_lscav=1 ==> Genthon (1992) scheme iflag_lscav=2 ==> Genthon (1992) scheme modified by Ph. Heinrich iflag_lscav=3 ==> Reddy-Boucher (2004) scheme iflag_lscav=4 ==> Reddy-Boucher (2004) scheme modified by R. Pilon The basic equations of the last scheme are in the appendix of: Pilon et al (2014) Representation of transport and scavenging of trace particles in the Emanuel moist convection scheme. Q. J. Roy. Meteorol. Soc., 141, 1244-1258. In the last two schemes, aerosols are scavenged in-cloud by condensation, scavenged below-cloud by impaction, transported by precipitation, and released by evaporation. The flux of aerosols at the surface due to large scale precipitation (the wet deposition rate due to LS precipitation) is presently calculated as the integral of the tendency of aerosol concentration due to LS condensation processes. Of course this procedure ensures that there is conservation of aerosols in the large scale condensation scheme. However, the concentration of aerosols in the precipitation is actually computed (variable qPrls in phytrac) and could also be used to compute the large scale wet deposit. This is not what is done in the present version of LMDZ. 1f0989eab9835fe6e44202ad627471382d457114 229 228 2022-05-09T09:31:09Z Lguez 4 wikitext text/x-wiki Treatment of large scale scavenging in LMDZ. Various schemes may be used depending on the value of the flag iflag_lscav: iflag_lscav=0 ==> no large scale scavenging iflag_lscav=1 ==> Genthon (1992) scheme iflag_lscav=2 ==> Genthon (1992) scheme modified by Ph. Heinrich iflag_lscav=3 ==> Reddy-Boucher (2004) scheme iflag_lscav=4 ==> Reddy-Boucher (2004) scheme modified by R. Pilon The basic equations of the last scheme are in the appendix of: Pilon et al (2014) Representation of transport and scavenging of trace particles in the Emanuel moist convection scheme. Q. J. Roy. Meteorol. Soc., 141, 1244-1258. In the last two schemes, aerosols are scavenged in-cloud by condensation, scavenged below-cloud by impaction, transported by precipitation, and released by evaporation. The flux of aerosols at the surface due to large scale precipitation (the wet deposition rate due to LS precipitation) is presently calculated as the integral of the tendency of aerosol concentration due to LS condensation processes. Of course this procedure ensures that there is conservation of aerosols in the large scale condensation scheme. However, the concentration of aerosols in the precipitation is actually computed (variable qPrls in phytrac) and could also be used to compute the large scale wet deposit. This is not what is done in the present version of LMDZ. Other keywords: lessivage, phytrac 86eac16bad13128f2ecae07123675e1728c424d1 230 229 2022-05-09T09:33:47Z Lguez 4 wikitext text/x-wiki Treatment of large scale scavenging in LMDZ. Various schemes may be used depending on the value of the flag iflag_lscav: iflag_lscav=0 ==> no large scale scavenging iflag_lscav=1 ==> Genthon (1992) scheme iflag_lscav=2 ==> Genthon (1992) scheme modified by Ph. Heinrich iflag_lscav=3 ==> Reddy-Boucher (2004) scheme iflag_lscav=4 ==> Reddy-Boucher (2004) scheme modified by R. Pilon The basic equations of the last scheme are in the appendix of: Pilon et al (2014) Representation of transport and scavenging of trace particles in the Emanuel moist convection scheme. Q. J. Roy. Meteorol. Soc., 141, 1244-1258. In the last two schemes, aerosols are scavenged in-cloud by condensation, scavenged below-cloud by impaction, transported by precipitation, and released by evaporation. The flux of aerosols at the surface due to large scale precipitation (the wet deposition rate due to LS precipitation) is presently calculated as the integral of the tendency of aerosol concentration due to LS condensation processes. Of course this procedure ensures that there is conservation of aerosols in the large scale condensation scheme. However, the concentration of aerosols in the precipitation is actually computed (variable qPrls in phytrac) and could also be used to compute the large scale wet deposit. This is not what is done in the present version of LMDZ. Original author: Jean-Yves Grandpeix Other keywords: lessivage, phytrac 81fd0d982c4c4bc8d26fb7aa6b4943cd6c9cdff9 WhatIs: The ok strato parameter 0 83 231 162 2022-05-09T10:02:26Z Emillour 3 wikitext text/x-wiki The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most often in the "vert.def" (or sometimes "gcm.def") file, as it is strongly linked to the model vertical resolution Setting '''ok_strato=y''' is recommended in most cases as it implies: * Some impact on the vertical discretization (i.e. where the model levels are placed) * Some switches on physical parametrizations related to the impact of gravity waves (orographic and non-orographic) Running with '''ok_strato=n''' would only be useful and advised if running with simple setups such as with 19 vertical layers (with old ~CMIP3-like physics packages) or for aquaplanets or without physics (in Held&Suarez configuration). Note also that if '''ok_strato=n''' then the sponge layer is not used either (see the leapfrog routine). 09/05/2022 [[Category:WhatIs]] [[Category:Inputs]] 5f1d4d25f625584d47f004307d5263d8c29e9381 The sponge layer 0 81 232 159 2022-05-09T10:10:47Z Emillour 3 wikitext text/x-wiki == in a nutshell == The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top. In practice its application is thus limited to a few of the topmost layers (usually 4), with decreasing impact with decreasing altitudes. The sponge layer is a relaxation of main variables (winds and/or potential temperature) towards a given value or their zonal mean along a given time scale. == Sponge layer parameters == The parameters controlling the sponge layer are in input file gcm.def (or sometimes in vert_L**.def as they are strongly linked to the vertical grid) * iflag_top_bound (integer): 0 for no sponge, 1 for a sponge over the last 4 topmost layers, 2 to have a sponge layer extending over topmost layers down to a pressure which is 100 times that of the topmost layer's. * mode_top_bound (integer): 0 for no relaxation, 1 to relax winds (u,v) to zero, 2 to relax winds (u,v) towards their zonal mean, 3 to relax winds (u,v) and potential temperature towards their zonal mean. * tau_top_bound (real, Hz): inverse of the relaxation characteristic time scale at the topmost layer; which is then halved at each successive descending layer. == Application of the sponge == The sponge is applied right after dissipation at each dissipation step, but only if the flag '''ok_strato=y''' == Sponge routine == The sponge computations are done in routine '''dyn3d/top_bound.F''' (for the serial dynamical core; equivalently in '''dyn3dmem/top_bound_loc.F''' for the parallel dynamical core) 09/05/2022 [[Category:inputs]] aa00599e653a48fba74e76f65b21b2cc7ff37470 Création des fichiers de guidage et adaptation de l'exécution 0 51 233 201 2022-05-13T11:13:32Z Asima 14 MAJ des liens vers scripts d'interpolation et Catégories; peaufinage du texte wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y [[Category:guidage]] [[Category:HowTo]] guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 13 [[Category:Guidage]][[Category:Nuging]][[Category:Guidage/Nuging]] a51a539c3d83df3d0afffc1a9ff4944cdef60afe 244 233 2022-05-13T16:10:17Z Asima 14 wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y [[Category:guidage]] [[Category:HowTo]] guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 13 [[Category:Guidage]] 69b0888ed387ea82b09e4a945c401cf9a5db3e3f 253 244 2022-05-16T13:18:16Z Lfairhead 1 wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y [[Category:guidage]] [[Category:HowTo]] guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 13 [[Category:Guidage]][[Category:Nudging]] 843e3e1a2baa17770a417eac585dd94fa3f4e774 254 253 2022-05-16T13:19:33Z Lfairhead 1 wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 13 [[Category:Guidage]][[Category:Nudging]][[Category:HowTo]] ed1f85d6f2953e24d39556efd0a8fdf87f1600ec 255 254 2022-05-16T13:21:04Z Lfairhead 1 wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 13 [[Category:Guidage]][[Category:Nudging]][[Category:HowTo]] b0783cca91512306334d7fe0b77a6a0f25d8298a 256 255 2022-05-16T13:27:04Z Lfairhead 1 wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. (un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh/view ici]]) 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 13 [[Category:Guidage]][[Category:Nudging]][[Category:HowTo]] 7a26e644cd08c27dd882a70fb1f5183dab3e651e 257 256 2022-05-16T13:27:38Z Lfairhead 1 wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. (un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]]) 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 13 [[Category:Guidage]][[Category:Nudging]][[Category:HowTo]] 8572b7ab7116d5530adfc9be127916562eec7543 259 257 2022-05-19T10:53:12Z Asima 14 wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. (un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]]) 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 16 [[Category:Guidage]][[Category:Nudging]][[Category:HowTo]] 35777eb6ba2394042c48d7894f1538dec6cf44bd 261 259 2022-05-19T12:21:55Z Asima 14 /* Adapter le run */ wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. (un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]]) 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y (Note : avec libIGCM, mettre ok_guide=y in lmdz.card ; c'est lmdz.driver qui va changer automatiquement guide.def ) guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc (Note : avec libIGCM, les fichiers doivent être indiqués dans lmdz.card dans la section BoundaryFiles ) 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 16 [[Category:Guidage]][[Category:Nudging]][[Category:HowTo]] 0e7303d5f370b1ed3dfc4d47885ace0e6669df83 262 261 2022-05-19T12:41:18Z Asima 14 /* Créer les fichiers de guidage */ wikitext text/x-wiki == Créer les fichiers de guidage == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y (Note : avec libIGCM, ce fichier est créé automatiquement dans $STORE/IGCM_OUT/LMDZ/EL*-$resol/ATM/Output/Grid , lorsqu'on fait tourner l'expérience CREATE pour créer les fichiers initiaux et limites pour le grid choisi - régulier ou zoomé, cf gcm.def) 2 => Extraire les scripts pour interpolation de fichiers de guidage : wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE ou (avec ID et mdp) : svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle. Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation. (un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]]) 3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin. 4 => Interpoler avec interp_from_*.ksh : 4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION": gridfile=chemin pour grilles_gcm.nc indir= ou se trouver les fichier era-i varlist="u v" etc : les variables a interpoler outdir= répertoire de resultats first_year=2011 last_year=2011 rundir= répertoire temporaire (for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année 4.b => Lancer le script ; par ex : ./interp_from_era.ksh == Adapter le run == 5 => Créer/adapter le fichier guide.def, par exemple : ## debut guide.def # ok_guide=y : guidage active ok_guide=y (Note : avec libIGCM, mettre ok_guide=y in lmdz.card ; c'est lmdz.driver qui va changer automatiquement guide.def ) guide_u= y guide_v= y guide_T= n guide_P= n guide_Q= n tau_min_u=0.0208333 tau_max_u=0.125 tau_min_v=0.0208333 tau_max_v=0.125 ## fin guide.def Remarque :<br/> Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/> Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/> Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/> Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/> 6 => Ajouter en tête de run.def la prise en compte du fichier guide.def : INCLUDEDEF=guide.def 7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ; Exemple : ln -s ERAI_interp/2011/u_201101_erai.nc u.nc ln -s ERAI_interp/2011/v_201101_erai.nc v.nc (Note : avec libIGCM, les fichiers doivent être indiqués dans lmdz.card dans la section BoundaryFiles ) 8 => Lancer l’exécution ; exemple : ./gcm.e > out_guide 2>&1 2022 mai 16 [[Category:Guidage]][[Category:Nudging]][[Category:HowTo]] e6950164c9efab9f2f5cf548f1b594bc156c8d86 WhatisDYNAMICO 0 111 234 2022-05-13T13:12:31Z Dubos 15 Page créée avec « The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model. LMDZ6, the current versio... » wikitext text/x-wiki The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model. LMDZ6, the current version of [https://lmdz.lmd.jussieu.fr/ LMDZ], has a shallow-atmosphere, hydrostatic dynamical core. It is based on a latitude-longitude C-grid, a hybrid pressure-based terrain-following vertical coordinate, second-order enstrophy-conserving finite-difference discretization and positive-definite advection. Grid refinement is implemented as a continuous zoom via smooth grid stretching. An extensive package of physical paramererizations is coupled to the dynamical core. IPSL-CM is currently used to produce AR5 simulations. LMD-Z is also at the heart of GCMs of planetary atmospheres (Mars, Venus and Titan). It is well-known that the latitude-longitude coordinates have a strong singularity at the poles which is undesirable in terms of both numerical stability and computational efficiency. Regular tesselations of the sphere such as a recursively subdivided icosahedron provide an almost-uniform grid and a path to highly parallel computations based on domain decomposition. LMD's logo is itself an icosahedron, evoking the pioneering work of Robert Sadourny on the use of icosahedral grids for solving the equations of atmospheric motion. The main role of DYNAMICO is to re-formulate in LMD-Z the horizontal advection and dynamics on a icosahedral grid, while preserving or improving their qualities with respect to accuracy, conservation laws and wave dispersion. Efficient implementation on present and future supercomputing architectures is also a key issue addressed by DYNAMICO. DYNAMICO is currently able to solve the hydrostatic primitive equations and participated to the DCMIP workshop held in August 2012 at NCAR. In the near future we will investigate its extension to deep-atmosphere and possibly non-hydrostatic equations following a variational approach that naturally conserves mass, energy and, in a somewhat restricted sense, potential vorticity. A grid refinement strategy based on variable-resolution, fully unstructured meshes is under development. A broader goal is to revisit all fundamental features of the dynamical core, especially the shallow-atmosphere/traditional approximation, the vertical coordinate and the coupling with physics. 056f6cb0a335820eda4200da90ad7646d71449e4 235 234 2022-05-13T13:13:37Z Dubos 15 wikitext text/x-wiki The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model. LMDZ6, the current version of [https://lmdz.lmd.jussieu.fr/ LMDZ], has a shallow-atmosphere, hydrostatic dynamical core. It is based on a latitude-longitude C-grid, a hybrid pressure-based terrain-following vertical coordinate, second-order enstrophy-conserving finite-difference discretization and positive-definite advection. Grid refinement is implemented as a continuous zoom via smooth grid stretching. An extensive package of physical paramererizations is coupled to the dynamical core. IPSL-CM is currently used to produce AR5 simulations. LMD-Z is also at the heart of GCMs of planetary atmospheres (Mars, Venus and Titan). It is well-known that the latitude-longitude coordinates have a strong singularity at the poles which is undesirable in terms of both numerical stability and computational efficiency. Regular tesselations of the sphere such as a recursively subdivided icosahedron provide an almost-uniform grid and a path to highly parallel computations based on domain decomposition. LMD's logo is itself an icosahedron, evoking the pioneering work of Robert Sadourny on the use of icosahedral grids for solving the equations of atmospheric motion. The main role of DYNAMICO is to re-formulate in LMD-Z the horizontal advection and dynamics on a icosahedral grid, while preserving or improving their qualities with respect to accuracy, conservation laws and wave dispersion. Efficient implementation on present and future supercomputing architectures is also a key issue addressed by DYNAMICO. DYNAMICO is currently able to solve the hydrostatic primitive equations and participated to the DCMIP workshop held in August 2012 at NCAR. In the near future we will investigate its extension to deep-atmosphere and possibly non-hydrostatic equations following a variational approach that naturally conserves mass, energy and, in a somewhat restricted sense, potential vorticity. A grid refinement strategy based on variable-resolution, fully unstructured meshes is under development. A broader goal is to revisit all fundamental features of the dynamical core, especially the shallow-atmosphere/traditional approximation, the vertical coordinate and the coupling with physics. [[Category:DYNAMICO]] [[Category:]] cf422630d5a4edc0344623f6bf2187b17f6c483a 240 235 2022-05-13T13:47:03Z Dubos 15 wikitext text/x-wiki The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model. LMDZ6, the current version of [https://lmdz.lmd.jussieu.fr/ LMDZ], has a shallow-atmosphere, hydrostatic dynamical core. It is based on a latitude-longitude C-grid, a hybrid pressure-based terrain-following vertical coordinate, second-order enstrophy-conserving finite-difference discretization and positive-definite advection. Grid refinement is implemented as a continuous zoom via smooth grid stretching. An extensive package of physical paramererizations is coupled to the dynamical core. IPSL-CM is currently used to produce AR5 simulations. LMD-Z is also at the heart of GCMs of planetary atmospheres (Mars, Venus and Titan). It is well-known that the latitude-longitude coordinates have a strong singularity at the poles which is undesirable in terms of both numerical stability and computational efficiency. Regular tesselations of the sphere such as a recursively subdivided icosahedron provide an almost-uniform grid and a path to highly parallel computations based on domain decomposition. LMD's logo is itself an icosahedron, evoking the pioneering work of Robert Sadourny on the use of icosahedral grids for solving the equations of atmospheric motion. The main role of DYNAMICO is to re-formulate in LMD-Z the horizontal advection and dynamics on a icosahedral grid, while preserving or improving their qualities with respect to accuracy, conservation laws and wave dispersion. Efficient implementation on present and future supercomputing architectures is also a key issue addressed by DYNAMICO. DYNAMICO is currently able to solve the hydrostatic primitive equations and participated to the DCMIP workshop held in August 2012 at NCAR. In the near future we will investigate its extension to deep-atmosphere and possibly non-hydrostatic equations following a variational approach that naturally conserves mass, energy and, in a somewhat restricted sense, potential vorticity. A grid refinement strategy based on variable-resolution, fully unstructured meshes is under development. A broader goal is to revisit all fundamental features of the dynamical core, especially the shallow-atmosphere/traditional approximation, the vertical coordinate and the coupling with physics. [[Category:DYNAMICO]] cae9d4a17000281b4cec6e49122fb033f3135dc3 Catégorie:DYNAMICO 14 112 236 2022-05-13T13:14:57Z Dubos 15 Page créée avec « The DYNAMICO dynamical core. » wikitext text/x-wiki The DYNAMICO dynamical core. 06700b543a76b83756fe8272cbfe3d226fe86cc4 CompilingDYNAMICO 0 113 237 2022-05-13T13:32:44Z Dubos 15 Page créée avec « = Getting and compiling DYNAMICO = == Getting DYNAMICO == DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license and should be c... » wikitext text/x-wiki = Getting and compiling DYNAMICO = == Getting DYNAMICO == DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license and should be considered beta-stage code. The latest version is accessible through git : <pre> git clone git@gitlab.in2p3.fr:ipsl/projets/dynamico/dynamico.git git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git </pre> == Compiling DYNAMICO == DYNAMICO is written in Fortran 90 with some legacy code in Fortran 77. The build process is based on [http://metomi.github.io/fcm/doc/user_guide/make.html FCM]. DYNAMICO requires the NetCDF library, including the F90 modules. MPI is required for parallel execution. DYNAMICO depends on the NetCDF and BLAS/LAPACK libraries. The compiling process is automated but some information is needed to guide it. This information is contained in text files in source:codes/icosagcm/trunk/arch . Sample files corresponding to a few machines (Ada at IDRIS, Curie at TGCC) are present. Assuming you compile on Ada : <pre> cd DYNAMICO ./make_icosa -arch X64_ADA -parallel mpi -prod -job 8 </pre> will compile DYNAMICO. The make_icosa script accepts keyword-value pairs which drive its behaviour. The most important option is arch=ARCH (here ARCH=X64_ADA). It directs make_icosa to use the information contained in : * arch/arch-ARCH.env * arch/arch-ARCH.fcm * arch/arch-ARCH.path The *.env file is a shell script that is executed by make_icosa. It sets up the environment for use by *.path. *.path defines paths to libraries and modules needed for compilation. *.fcm defines the commands used to compile, link, etc. as well as options to be passed to the compiler/linker . The option "-job 8" is similar to "make -j 8" and compiles in parallel for speed. After a successful build the main executable is found in the bin/ directory. == Compiling with XIOS output == DYNAMICO can direct its output through XIOS, a parallel I/O library and server. See https://forge.ipsl.jussieu.fr/ioserver . To enable XIOS output : * get and compile XIOS in a separate directory * set the variables XIOS_INCDIR , XIOS_LIBDIR and XIOS_LIB to appropriate values in your arch.path * use the option "-with_xios" in your "make_icosa" command Why use XIOS : * without XIOS, each output field is written to a separate NetCDF file. Post-processing is required to group several fields together. * with XIOS, several fields can be written to a few output files. This behavior is controlled by the input file xios.xml (required). See https://forge.ipsl.jussieu.fr/ioserver for the syntax of this XML file. * without XIOS, data to be written is communicated to the main MPI process, which writes to the NetCDF files while other MPI processes stay idle. This is not expected to scale to a large number of MPI processes. * XIOS provides asynchronous, parallel I/O in order to scale to large MPI process counts. [[Category:DYNAMICO]] 11f5c981d1ebd427dbd3306cee0a0a04e670c741 238 237 2022-05-13T13:40:54Z Dubos 15 Getting and compiling DYNAMICO wikitext text/x-wiki = Getting and compiling DYNAMICO = == Getting DYNAMICO == DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license. The latest version is accessible through git : <pre> git clone git@gitlab.in2p3.fr:ipsl/projets/dynamico/dynamico.git git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git </pre> == Compiling DYNAMICO == DYNAMICO is written in Fortran 90 with some legacy code in Fortran 77. The build process is based on [http://metomi.github.io/fcm/doc/user_guide/make.html FCM]. DYNAMICO requires the NetCDF library, including the F90 modules. MPI is required for parallel execution. DYNAMICO depends on the NetCDF and BLAS/LAPACK libraries. The compiling process is automated but some information is needed to guide it. This information is contained in text files in source:codes/icosagcm/trunk/arch . Sample files corresponding to a few machines (Ada at IDRIS, Curie at TGCC) are present. Assuming you compile on Ada : <pre> cd DYNAMICO ./make_icosa -arch X64_ADA -parallel mpi -prod -job 8 </pre> will compile DYNAMICO. The make_icosa script accepts keyword-value pairs which drive its behaviour. The most important option is arch=ARCH (here ARCH=X64_ADA). It directs make_icosa to use the information contained in : * arch/arch-ARCH.env * arch/arch-ARCH.fcm * arch/arch-ARCH.path The *.env file is a shell script that is executed by make_icosa. It sets up the environment for use by *.path. *.path defines paths to libraries and modules needed for compilation. *.fcm defines the commands used to compile, link, etc. as well as options to be passed to the compiler/linker . The option "-job 8" is similar to "make -j 8" and compiles in parallel for speed. After a successful build the main executable is found in the bin/ directory. == Compiling with XIOS output == DYNAMICO can direct its output through XIOS, a parallel I/O library and server. See https://forge.ipsl.jussieu.fr/ioserver . To enable XIOS output : * get and compile XIOS in a separate directory * set the variables XIOS_INCDIR , XIOS_LIBDIR and XIOS_LIB to appropriate values in your arch.path * use the option "-with_xios" in your "make_icosa" command Why use XIOS : * without XIOS, each output field is written to a separate NetCDF file. Post-processing is required to group several fields together. * with XIOS, several fields can be written to a few output files. This behavior is controlled by the input file xios.xml (required). See https://forge.ipsl.jussieu.fr/ioserver for the syntax of this XML file. * without XIOS, data to be written is communicated to the main MPI process, which writes to the NetCDF files while other MPI processes stay idle. This is not expected to scale to a large number of MPI processes. * XIOS provides asynchronous, parallel I/O in order to scale to large MPI process counts. [[Category:DYNAMICO]] da70c38b0f05768ba783260c60dae18613524305 239 238 2022-05-13T13:42:09Z Dubos 15 /* Compiling DYNAMICO */ wikitext text/x-wiki = Getting and compiling DYNAMICO = == Getting DYNAMICO == DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license. The latest version is accessible through git : <pre> git clone git@gitlab.in2p3.fr:ipsl/projets/dynamico/dynamico.git git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git </pre> == Compiling DYNAMICO == DYNAMICO is written in Fortran 2003. The build process is based on [http://metomi.github.io/fcm/doc/user_guide/make.html FCM]. DYNAMICO requires the NetCDF library, including the F90 modules. MPI is required for parallel execution and XIOS for asynchronous I/O. DYNAMICO depends on the NetCDF and BLAS/LAPACK libraries. The compiling process is automated but some information is needed to guide it. This information is contained in text files in source:codes/icosagcm/trunk/arch . Sample files corresponding to a few machines (Ada at IDRIS, Curie at TGCC) are present. Assuming you compile on Ada : <pre> cd DYNAMICO ./make_icosa -arch X64_ADA -parallel mpi -prod -job 8 </pre> will compile DYNAMICO. The make_icosa script accepts keyword-value pairs which drive its behaviour. The most important option is arch=ARCH (here ARCH=X64_ADA). It directs make_icosa to use the information contained in : * arch/arch-ARCH.env * arch/arch-ARCH.fcm * arch/arch-ARCH.path The *.env file is a shell script that is executed by make_icosa. It sets up the environment for use by *.path. *.path defines paths to libraries and modules needed for compilation. *.fcm defines the commands used to compile, link, etc. as well as options to be passed to the compiler/linker . The option "-job 8" is similar to "make -j 8" and compiles in parallel for speed. After a successful build the main executable is found in the bin/ directory. == Compiling with XIOS output == DYNAMICO can direct its output through XIOS, a parallel I/O library and server. See https://forge.ipsl.jussieu.fr/ioserver . To enable XIOS output : * get and compile XIOS in a separate directory * set the variables XIOS_INCDIR , XIOS_LIBDIR and XIOS_LIB to appropriate values in your arch.path * use the option "-with_xios" in your "make_icosa" command Why use XIOS : * without XIOS, each output field is written to a separate NetCDF file. Post-processing is required to group several fields together. * with XIOS, several fields can be written to a few output files. This behavior is controlled by the input file xios.xml (required). See https://forge.ipsl.jussieu.fr/ioserver for the syntax of this XML file. * without XIOS, data to be written is communicated to the main MPI process, which writes to the NetCDF files while other MPI processes stay idle. This is not expected to scale to a large number of MPI processes. * XIOS provides asynchronous, parallel I/O in order to scale to large MPI process counts. [[Category:DYNAMICO]] 1537650a2de82196c431f618de8721f9e58b5a35 RunningDYNAMICO 0 114 241 2022-05-13T13:47:22Z Dubos 15 Page créée avec « = Running DYNAMICO = DYNAMICO can produce a rather large amount of output. It is therefore recommended to prepare a separate directory for each numerical experiment on a... » wikitext text/x-wiki = Running DYNAMICO = DYNAMICO can produce a rather large amount of output. It is therefore recommended to prepare a separate directory for each numerical experiment on a filesystem of adequate capacity. In this directory, copy the executable icosa_gcm.exe. You will find it in DYNAMICO/bin/, where DYNAMICO is the main directory containing the source code. You will also need configuration files that define resolution, initial condition, etc. Sample files can be found in subdirectories of [source:codes/icosagcm/trunk/param_sets DYNAMICO/param_sets]. Copy the *.def files from the desired sub-directory. There is typically run.def and earth_const.def . run.def is the main configuration file and includes earth_const.def Currently DYNAMICO generates its own grid. It can run idealized test cases which define their own initial conditions. In that case no other input files are needed beyond *.def and, if using XIOS, *.xml files controlling XIOS behavior. It may also restart from a previous run, reading from a restart file. == IMPORTANT == Make sure you set <pre> ulimit -s unlimited </pre> before running DYNAMICO in order to avoid stack overflows (segmentation faults) due to large automatic arrays. With OpenMP: <pre> export OMP_STACK_SIZE=100M </pre> or a larger value if necessary. == Running DYNAMICO as a primitive equation solver == By default DYNAMICO solves the traditional, shallow-atmosphere, hydrostatic equations. An example is provided in [source:codes/icosagcm/trunk/param_sets/dcmip2012/ dcmip2012/test4/test4.1/test4.1-0 ]. This example runs a dry baroclinic instability test case (Jablonowski & Williamson, 2006). Sample configuration files for the climate-like Held and Suarez (1994) benchmark can be found in [source:codes/icosagcm/trunk/param_sets/climate/Held_Suarez climate/Held_Suarez ] == Horizontal resolution == Horizontal resolution is controlled by the parameter nbp defined in run.def. The total number of hexagonal cells is about 10 x nbp x nbp, corresponding to subdividing each main triangle of the icosahedron in nbp x nbp sub-triangles (there are about twice as many triangles as there are hexagons). Notice that, everything else being equal, the time step (dt) should be inversely proportional to nbp for numerical stability. == Parallel computing with DYNAMICO == DYNAMICO can run in parallel by dividing the icosahedral mesh into tiles. There are at least 10 tiles corresponding to the 20 faces of the icosahedron joined in pairs to form rhombi. These 10 rhombi are further subdivided in nsplit_i x nsplit_j tiles. nsplit_i and nsplit_j are defined in run.def . nsplit_X needs not divide nbp exactly. To run DYNAMICO on a parallel machine, you must first compile it with OpenMPI and/or MPI. Then use mpirun or the equivalent command to run it. There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles. There can be more tiles than processes, in which case each process will take care of several tiles. [[Category:DYNAMICO]] 2133df263e1407f28fccddd49d702a996f784667 242 241 2022-05-13T13:52:11Z Dubos 15 /* Running DYNAMICO */ wikitext text/x-wiki = Running DYNAMICO = DYNAMICO can produce a rather large amount of output. It is therefore recommended to prepare a separate directory for each numerical experiment on a filesystem of adequate capacity. In this directory, copy the executable icosa_gcm.exe. You will find it in DYNAMICO/bin/, where DYNAMICO is the main directory containing the source code. You will also need configuration files that define resolution, initial condition, etc. Sample files can be found in subdirectories of [source:codes/icosagcm/trunk/param_sets DYNAMICO/param_sets]. Copy the *.def files from the desired sub-directory. There is typically run.def and earth_const.def . run.def is the main configuration file and includes earth_const.def Currently DYNAMICO generates its own grid. It can run idealized test cases which define their own initial conditions. In that case no other input files are needed beyond *.def and, if using XIOS, *.xml files controlling XIOS behavior. It may also restart from a previous run, reading from a restart file. == IMPORTANT == Make sure you set <pre> ulimit -s unlimited </pre> before running DYNAMICO in order to avoid stack overflows (segmentation faults) due to large automatic arrays. With OpenMP: <pre> export OMP_STACK_SIZE=100M </pre> or a larger value if necessary. == Running DYNAMICO as a primitive equation solver == By default DYNAMICO solves the traditional, shallow-atmosphere, hydrostatic equations. An example is provided in [https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico/-/blob/trunk2master/param_sets/dcmip2012/run41.def param_sets/dcmip2012/run41.def]. This example runs a dry baroclinic instability test case (Jablonowski & Williamson, 2006). Sample configuration files for the climate-like Held and Suarez (1994) benchmark can be found in [https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico/-/tree/trunk2master/param_sets/climate/Held_Suarez param_sets/climate/Held_Suarez] == Horizontal resolution == Horizontal resolution is controlled by the parameter nbp defined in run.def. The total number of hexagonal cells is about 10 x nbp x nbp, corresponding to subdividing each main triangle of the icosahedron in nbp x nbp sub-triangles (there are about twice as many triangles as there are hexagons). Notice that, everything else being equal, the time step (dt) should be inversely proportional to nbp for numerical stability. == Parallel computing with DYNAMICO == DYNAMICO can run in parallel by dividing the icosahedral mesh into tiles. There are at least 10 tiles corresponding to the 20 faces of the icosahedron joined in pairs to form rhombi. These 10 rhombi are further subdivided in nsplit_i x nsplit_j tiles. nsplit_i and nsplit_j are defined in run.def . nsplit_X needs not divide nbp exactly. To run DYNAMICO on a parallel machine, you must first compile it with OpenMPI and/or MPI. Then use mpirun or the equivalent command to run it. There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles. There can be more tiles than processes, in which case each process will take care of several tiles. [[Category:DYNAMICO]] a6c5b9b0f0134abb36b4d048fc49cf24bd484e90 Nudging in LMDZ 0 94 243 206 2022-05-13T16:04:14Z Asima 14 wikitext text/x-wiki == The concept == Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Guidage]] 537a201bbcf2cd6d455715d0a3889e4423418b79 245 243 2022-05-13T17:59:34Z Asima 14 /* The concept */ wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Guidage]] 23e429c13fa0a36f7c103c4eb9b9b859243a23ff 246 245 2022-05-16T09:58:08Z Emillour 3 wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Nudging|Guidage]] 8eccd25457673a41490ee7b7a1f1ba86040604db 247 246 2022-05-16T10:01:32Z Emillour 3 wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Nudging]] [[Category:Guidage]] 8c30b6f5719c58c41a8508f8c4ec59c67cfdc058 250 247 2022-05-16T13:06:05Z Lfairhead 1 wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. '''''Caution''''': === Ne pas confondre constante de rappel et fréquence d'appel au guidage === Quand on guide : # On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage). # On interpole linéairement en temps les champs de guidage. # On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max. mais "je nudge à chaque pas de temps". == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> 14/12/2021 [[Category:Nudging]] [[Category:Guidage]] fc66f20fe59ee602275e35f41220facfa2d1f262 251 250 2022-05-16T13:13:02Z Lfairhead 1 wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. '''''Caution''''': ==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Quand on guide : # On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage). # On interpole linéairement en temps les champs de guidage. # On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max. mais "je nudge à chaque pas de temps". == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> == Nudging towards the wind zonal mean == Quelques précisions : * Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int). * Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D. * L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes : ** on calcule (u-ug) en chaque point ** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire... Attention aux interférences avec guide_reg, le plus simple étant peut-être de commenter les lignes "if guide_reg..." dans la routine guide_zonave. Ne pas confondre constante de rappel et fréquence d'appel au guidage 14/12/2021 [[Category:Nudging]] [[Category:Guidage]] 3c8ee09cb626fb66dbf2b8732d349e45d9877643 252 251 2022-05-16T13:16:36Z Lfairhead 1 wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. '''''Caution''''': ==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Quand on guide : # On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage). # On interpole linéairement en temps les champs de guidage. # On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max. mais "je nudge à chaque pas de temps". == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> == Notes == ==== Nudging towards the wind zonal mean ==== Quelques précisions : * Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int). * Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D. * L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes : ** on calcule (u-ug) en chaque point ** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire... Attention aux interférences avec guide_reg, le plus simple étant peut-être de commenter les lignes "if guide_reg..." dans la routine guide_zonave. Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Nudging towards surface pressure ==== Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle. 14/12/2021 [[Category:Nudging]] [[Category:Guidage]] 7b040a5912204b8b996f3e6034d61ee6acea6cc6 258 252 2022-05-16T13:29:30Z Lfairhead 1 /* Nudging files */ wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. '''''Caution''''': ==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Quand on guide : # On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage). # On interpole linéairement en temps les champs de guidage. # On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max. mais "je nudge à chaque pas de temps". == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. To create these files see [[Création des fichiers de guidage et adaptation de l'exécution]] == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> == Notes == ==== Nudging towards the wind zonal mean ==== Quelques précisions : * Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int). * Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D. * L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes : ** on calcule (u-ug) en chaque point ** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire... Attention aux interférences avec guide_reg, le plus simple étant peut-être de commenter les lignes "if guide_reg..." dans la routine guide_zonave. Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Nudging towards surface pressure ==== Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle. 14/12/2021 [[Category:Nudging]] [[Category:Guidage]] d90ea32fdbfa63f9ee093166e92e4ae72213e292 260 258 2022-05-19T12:03:46Z Asima 14 wikitext text/x-wiki == The concept == ''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. '''''Caution''''': ==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Quand on guide : # On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage). # On interpole linéairement en temps les champs de guidage. # On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max. mais "je nudge à chaque pas de temps". == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. To create these files see [[Création des fichiers de guidage et adaptation de l'exécution]] == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> == Notes == ==== Nudging towards the wind zonal mean ==== Quelques précisions : * Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int). * Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D. * L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes : ** on calcule (u-ug) en chaque point ** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire... Attention aux interférences avec guide_reg, le plus simple étant peut-être de commenter les lignes "if guide_reg..." dans la routine guide_zonave. Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Nudging towards surface pressure ==== Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle. 2022/05/16 [[Category:Nudging]] [[Category:Guidage]] 20f1625092abfb17f93a9a0b74cf0f7398d2f258 263 260 2022-05-19T12:53:59Z Asima 14 /* The concept */ wikitext text/x-wiki == The concept == ''For indepth explanations, see this doc in French (dated 2009, some code details are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf'' Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$: \begin{align} \frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau} \end{align} Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region. == Nudging parameters in LMDZ == The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."): <pre> ok_guide = y </pre> ("guide" means "nudge" in French). Then one must select which fields will be nudged via the ''guide_*'' parameters: <pre> guide_u=y guide_v=y guide_T=y guide_P=n guide_Q=n </pre> In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only. In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g. <pre> tau_min_u= 0.0208333 tau_max_u= 10. tau_min_v= 0.0208333 tau_max_v= 10. tau_min_T= 0.0208333 tau_max_T= 10. </pre> In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region. '''''Caution''''': ==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Quand on guide : # On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage). # On interpole linéairement en temps les champs de guidage. # On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max. mais "je nudge à chaque pas de temps". == Nudging files == In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc. To create these files see [[Création des fichiers de guidage et adaptation de l'exécution]] == Nudging contribution output == One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def): <pre> guide_sav=y </pre> == Notes == ==== Nudging towards the wind zonal mean ==== Quelques précisions : * Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int). * Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D. * L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes : ** on calcule (u-ug) en chaque point ** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire... Attention aux interférences avec guide_reg, le plus simple étant peut-être de commenter les lignes "if guide_reg..." dans la routine guide_zonave. Ne pas confondre constante de rappel et fréquence d'appel au guidage ==== Nudging towards surface pressure ==== Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle. 2022/05/16 [[Category:Nudging]] [[Category:Guidage]] 3db41628a95d189ff82f559cb82bdf79fefbae39 Catégorie:Nudging 14 115 248 2022-05-16T10:02:43Z Emillour 3 Page créée avec « Various pages about nudging in LMDZ » wikitext text/x-wiki Various pages about nudging in LMDZ 1fe0e57f08469955e1b29ebda6fbe1c55f451ae7 249 248 2022-05-16T10:13:11Z Emillour 3 wikitext text/x-wiki Various pages about nudging in LMDZ See also the "Guidage" Category for French pages on this topic 52336508cf0fd9565f90249547ec00785f52d796 Calendars 0 88 264 171 2022-07-05T11:10:23Z Emillour 3 wikitext text/x-wiki LMDZ can run using various calendars. The choice of calendar is set using the ''calend'' parameter (string) in the ''run.def'' file, which may be set to: * calend=earth_360d (default value if ''calend'' is not set) : years of 360 days (12 months of 30 days each) * calend=earth_365d : years of 365 days (12 months of varying length; 28 days in February every year) * calend=earth_366d : real gregorian year of 365 or 366 days with leap years * calend=gregorian : same as earth_366d The default behavior of the model is to use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation). But the user may reset the date via the following flag: * raz_date=1 (default is 0, i.e. no calendar reset, continue from date read in the start file) : reset the calendar If resetting the calendar then the user should also provide in ''run.def'' : * anneeref=... : calendar year (default=1998; why not? have to start somewhere...) * dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year) * starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight at longitude 0) 03/12/2021 [[Category:Inputs]] 7eb8c418eda5ec6cb39f5e86a52fad7f9a77d07e WhatIs: The raz date parameter 0 116 265 2022-07-05T11:10:35Z Emillour 3 Page créée avec « The '''raz_date''' parameter is an integer flag (usually in the run.def file) which can be set to 0 (its default value) to let the model use the date read in the start.nc... » wikitext text/x-wiki The '''raz_date''' parameter is an integer flag (usually in the run.def file) which can be set to 0 (its default value) to let the model use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation) or, if set to 1 reset the date manually. ('''raz''' is French shorthand for "Remise à zéro", i.e. reset to zero) If resetting the calendar with raz_date=1, then the user should also provide the following relevant information in ''run.def'': * anneeref=... : calendar year (default=1998; why not? have to start somewhere...) * dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year) * starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight at longitude 0) 05/07/2022 [[Category:Inputs]] 961efcb885bff0850a2a6296d29b2650acbfc849 266 265 2022-07-05T11:12:02Z Emillour 3 wikitext text/x-wiki The '''raz_date''' parameter is an integer flag (usually in the ''run.def'' file) which can be set to 0 (its default value) to let the model use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation) or, if set to 1, reset the date manually. ('''raz''' is French shorthand for "Remise à zéro", i.e. reset to zero) If resetting the calendar with raz_date=1, then the user should also provide the following relevant information in ''run.def'': * anneeref=... : calendar year (default=1998; why not? have to start somewhere...) * dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year) * starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight at longitude 0) 05/07/2022 [[Category:Inputs]] 4920818803938f8699a342bb9ed9dc4cffa6b6b5 HowTo: Hard code the path to a dynamic library in the executable 0 64 267 124 2022-07-05T14:03:42Z Emillour 3 wikitext text/x-wiki If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic libraries (*.so shared object libraries), you can hard code the paths at compile (linking) time, with the <code>-Wl,rpath=</code> option. == general illustrative example == You want your executable to always first look for the needed library in /my/personal/stuff/lib and /some/other/place/lib , then compile with: <code>-Wl,rpath=/my/personal/stuff/lib:/some/other/place/lib</code> The drawback of this method is that if the libraries are later moved to different locations, your executable won't know about it and probably abort with an error message of the likes of: <code>error while loading shared libraries: ...</code> == LMDZ-specific example == Since compilation options are set in the [[WhatIs:_The_target_architecture_("arch")_files|arch.fcm]] file, this is where the option <code>-Wl,rpath=...</code> should be set, on the line starting with <code>%BASE_LD</code> For example if one wants to hard code to look for personal netcdf libraries that are located in /my/personal/netcdf/lib: <code>%BASE_LD -Wl,-rpath=/my/personal/netcdf/lib</code> Not that '''it is generally not recommended''' to use this option as if later on the target library is moved to a different location then the executable won't work anymore... You have been warned. 05/07/2022 [[Category:HowTo]] f54d86c628d88bf3fb09d47626bc72acfa76493e Radiative transfer schemes 0 117 268 2022-07-05T15:28:33Z Emillour 3 Page créée avec « There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' o... » wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which will be available if the GCM was compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]] ) * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which will be available if the GCM was compiled with the '''-rad ecrad''' option 05/07/2022 bad0ce83932d2a9c49b60503d2b6a0924d4aeb67 269 268 2022-07-05T15:30:08Z Emillour 3 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which will be available if the GCM was compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which will be available if the GCM was compiled with the '''-rad ecrad''' option. 05/07/2022 1637cb3185f68460136b72787cc456033e6328ed Some pointers about standalone installation of the IOIPSL library 0 118 270 2022-08-05T07:13:55Z Emillour 3 Page créée avec « This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library. == Prerequisites == IOIPSL is written in Fortran, so you need to have a Fortr... » wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library. == Prerequisites == IOIPSL is written in Fortran, so you need to have a Fortran compiler at hand (gfortran in the following examples), as well as an available NetCDF library compiled using that same compiler. One of the IOIPSL install scripts uses ksh (Korn Shell), which is not always available (Bash, Bourne Again Shell, is now the standard). So you might want to first install it, e.g. on Linux-Ubuntu: <syntaxhighlight lang="bash"> sudo apt install ksh </syntaxhighlight> If that is not an option (e.g. you do not have super-user privileges to install ksh) the you will need to manually modify a file (see section "Know problems and issues worth knowing about" below) === Downloading the IOIPSL library sources === One can do this using svn (subversion): <syntaxhighlight lang="bash"> svn checkout --username icmc_users --password icmc2022 https://forge.ipsl.jussieu.fr/igcmg/svn/IOIPSL/trunk IOIPSL </syntaxhighlight> where the trailing argument ''IOIPSL'' is customizable to whatever (non existing) subdirectory name one wants to have the library put in. As of April 2022 the IOIPSL distribution requires username/password authentification (not a big issue as a this does not require any specific registration step as the generic username/password given in the svn command line above can be used). === The makeioipsl_fcm compilation script and related FCM architecture files === The main script to compile the library is '''makeioipsl_fcm''', located in the distribution's top directory. It uses FCM (Flexible Configuration Management) to know about specific configuration options and set-up and thus requires (just like the GCM) appropriate ''architecture files'' (see [[WhatIs:_The_target_architecture_("arch")_files]]. These files contain information on which compiler to use, what compilation options to use, where relevant libraries are located etc. In practice one must thus create these ASCII text files in the '''arch/''' subdirectory. The naming convention is rather straightforward, when the script '''makeioipsl_fcm''' is run with the option '''-arch somename''', it will look for files '''arch/arch-somename.env''', '''arch/arch-somename.path''' and '''arch/arch-somename.fcm'''. You will most likely use the IOIPSL with LMDZ6. In that case it is recommended to use the same set of architecture files to compile IOIPSL and the GCM. == Building the IOIPSL library == Building the IOIPSL library then merely requires running the '''makeioipsl_fcm''' with the adequate mandatory '''-arch''' option (note that one can learn about all the possible options by running '''./makeioipsl_fcm -h'''), e.g.: <syntaxhighlight lang="bash"> ./makeioipsl_fcm -arch gfortran </syntaxhighlight> === Checking that the install was successful === If the previous step went well the '''IOIPSL/lib''' directory should contain the library: <pre> libioipsl.a </pre> and the '''IOIPSL/inc''' directory should contain the following module files: <pre> calendar.mod flincom.mod histcom.mod restcom.mod defprec.mod fliocom.mod ioipsl.mod stringop.mod errioipsl.mod getincom.mod mathelp.mod </pre> Congratulations! You can now use the IOIPSL library. == Know problems and issues worth knowing about == * ksh is needed to compile "out of the box"; if ksh is not available then the workaround is to replace line <syntaxhighlight lang="bash"> #!/bin/ksh </syntaxhighlight> to <syntaxhighlight lang="bash"> #!/bin/bash </syntaxhighlight> in the '''IOIPSL/ins_m_prec''' file prior to running the makeioipsl_fcm script. * Recent versions of the IOIPSL fails to work properly if compiled by gfortran version 4.8.5 (see e.g. https://trac.lmd.jussieu.fr/Planeto/ticket/62 ) but works fine with more recent versions of the compiler (tested with versions 7.2+) 05/08/2022 [[Category:HowTo]] a44629ef48e4a8ab8ff02f423022ec9029410d7d 271 270 2022-08-05T07:18:16Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library. == Prerequisites == IOIPSL is written in Fortran, so you need to have a Fortran compiler at hand (gfortran in the following examples), as well as an available NetCDF library compiled using that same compiler. One of the IOIPSL install scripts uses ksh (Korn Shell), which is not always available (Bash, Bourne Again Shell, is now the standard). So you might want to first install it, e.g. on Linux-Ubuntu: <syntaxhighlight lang="bash"> sudo apt install ksh </syntaxhighlight> If that is not an option (e.g. you do not have super-user privileges to install ksh) the you will need to manually modify a file (see section "Know problems and issues worth knowing about" below) === Downloading the IOIPSL library sources === One can do this using svn (subversion): <syntaxhighlight lang="bash"> svn checkout --username icmc_users --password icmc2022 https://forge.ipsl.jussieu.fr/igcmg/svn/IOIPSL/trunk IOIPSL </syntaxhighlight> where the trailing argument ''IOIPSL'' is customizable to whatever (non existing) subdirectory name one wants to have the library put in. As of April 2022 the IOIPSL distribution requires username/password authentification (not a big issue as a this does not require any specific registration step as the generic username/password given in the svn command line above can be used). === The makeioipsl_fcm compilation script and related FCM architecture files === The main script to compile the library is '''makeioipsl_fcm''', located in the distribution's top directory. It uses FCM (Flexible Configuration Management) to know about specific configuration options and set-up and thus requires (just like the GCM) appropriate ''architecture files'' (see [[WhatIs:_The_target_architecture_("arch")_files]]. These files contain information on which compiler to use, what compilation options to use, where relevant libraries are located etc. In practice one must thus create these ASCII text files in the '''arch/''' subdirectory. The naming convention is rather straightforward, when the script '''makeioipsl_fcm''' is run with the option '''-arch somename''', it will look for files '''arch/arch-somename.env''', '''arch/arch-somename.path''' and '''arch/arch-somename.fcm'''. You will most likely use the IOIPSL with LMDZ6. In that case it is recommended to use the same set of architecture files to compile IOIPSL and the GCM. == Building the IOIPSL library == Building the IOIPSL library then merely requires running the '''makeioipsl_fcm''' with the adequate mandatory '''-arch''' option (note that one can learn about all the possible options by running '''./makeioipsl_fcm -h'''), e.g.: <syntaxhighlight lang="bash"> ./makeioipsl_fcm -arch gfortran </syntaxhighlight> === Checking that the install was successful === If the previous step went well the '''IOIPSL/lib''' directory should contain the library: <pre> libioipsl.a </pre> The '''IOIPSL/inc''' directory should contain the following module files: <pre> calendar.mod flincom.mod histcom.mod restcom.mod defprec.mod fliocom.mod ioipsl.mod stringop.mod errioipsl.mod getincom.mod mathelp.mod </pre> And the '''IOIPSL/bin''' directory should contain the ''rebuild'' utility: <pre> flio_rbld rebuild </pre> Congratulations! You can now use the IOIPSL library. == Know problems and issues worth knowing about == * ksh is needed to compile "out of the box"; if ksh is not available then the workaround is to replace line <syntaxhighlight lang="bash"> #!/bin/ksh </syntaxhighlight> to <syntaxhighlight lang="bash"> #!/bin/bash </syntaxhighlight> in the '''IOIPSL/ins_m_prec''' file prior to running the makeioipsl_fcm script. * Recent versions of the IOIPSL fails to work properly if compiled by gfortran version 4.8.5 (see e.g. https://trac.lmd.jussieu.fr/Planeto/ticket/62 ) but works fine with more recent versions of the compiler (tested with versions 7.2+) 05/08/2022 [[Category:HowTo]] 14b1f27bc47871be2722c0e63f8e855b617536ff 272 271 2022-08-05T07:20:37Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library. == Prerequisites == IOIPSL is written in Fortran, so you need to have a Fortran compiler at hand (gfortran in the following examples), as well as an available NetCDF library compiled using that same compiler. One of the IOIPSL install scripts uses ksh (Korn Shell), which is not always available (Bash, Bourne Again Shell, is now the standard). So you might want to first install it, e.g. on Linux-Ubuntu: <syntaxhighlight lang="bash"> sudo apt install ksh </syntaxhighlight> If that is not an option (e.g. you do not have super-user privileges to install ksh) the you will need to manually modify a file (see section "Know problems and issues worth knowing about" below) === Downloading the IOIPSL library sources === One can do this using svn (subversion): <syntaxhighlight lang="bash"> svn checkout --username icmc_users --password icmc2022 https://forge.ipsl.jussieu.fr/igcmg/svn/IOIPSL/trunk IOIPSL </syntaxhighlight> where the trailing argument ''IOIPSL'' is customizable to whatever (non existing) subdirectory name one wants to have the library put in. As of April 2022 the IOIPSL distribution requires username/password authentification (not a big issue as a this does not require any specific registration step as the generic username/password given in the svn command line above can be used). === The makeioipsl_fcm compilation script and related FCM architecture files === The main script to compile the library is '''makeioipsl_fcm''', located in the distribution's top directory. It uses FCM (Flexible Configuration Management) to know about specific configuration options and set-up and thus requires (just like the GCM) appropriate ''architecture files'' (check out the [[WhatIs:_The_target_architecture_("arch")_files|page about these)]]. These files contain information on which compiler to use, what compilation options to use, where relevant libraries are located etc. In practice one must thus create these ASCII text files in the '''arch/''' subdirectory. The naming convention is rather straightforward, when the script '''makeioipsl_fcm''' is run with the option '''-arch somename''', it will look for files '''arch/arch-somename.env''', '''arch/arch-somename.path''' and '''arch/arch-somename.fcm'''. You will most likely use the IOIPSL with LMDZ6. In that case it is recommended to use the same set of architecture files to compile IOIPSL and the GCM. == Building the IOIPSL library == Building the IOIPSL library then merely requires running the '''makeioipsl_fcm''' with the adequate mandatory '''-arch''' option (note that one can learn about all the possible options by running '''./makeioipsl_fcm -h'''), e.g.: <syntaxhighlight lang="bash"> ./makeioipsl_fcm -arch gfortran </syntaxhighlight> === Checking that the install was successful === If the previous step went well the '''IOIPSL/lib''' directory should contain the library: <pre> libioipsl.a </pre> The '''IOIPSL/inc''' directory should contain the following module files: <pre> calendar.mod flincom.mod histcom.mod restcom.mod defprec.mod fliocom.mod ioipsl.mod stringop.mod errioipsl.mod getincom.mod mathelp.mod </pre> And the '''IOIPSL/bin''' directory should contain the ''rebuild'' utility: <pre> flio_rbld rebuild </pre> Congratulations! You can now use the IOIPSL library. == Know problems and issues worth knowing about == * ksh is needed to compile "out of the box"; if ksh is not available then the workaround is to replace line <syntaxhighlight lang="bash"> #!/bin/ksh </syntaxhighlight> to <syntaxhighlight lang="bash"> #!/bin/bash </syntaxhighlight> in the '''IOIPSL/ins_m_prec''' file prior to running the makeioipsl_fcm script. * Recent versions of the IOIPSL fails to work properly if compiled by gfortran version 4.8.5 (see e.g. https://trac.lmd.jussieu.fr/Planeto/ticket/62 ) but works fine with more recent versions of the compiler (tested with versions 7.2+) 05/08/2022 [[Category:HowTo]] 6fb42a83c19f154123f0241d3783552023015eef Available (bench) test cases 0 119 273 2022-08-05T10:03:42Z Emillour 3 Page créée avec « Test cases (or "bench" cases) are sets of initial conditions and input files that a user can download and use "out of the box", usually to test that his/her installation o... » wikitext text/x-wiki Test cases (or "bench" cases) are sets of initial conditions and input files that a user can download and use "out of the box", usually to test that his/her installation of LMDZ6 is fine. == Obtaining test (bench) cases == If using the [[WhatIs:_The_install_lmdz.sh_script|install_lmdz.sh script]], then a default (assuming script was run with "-bench 1") 32x32x39 case is downloaded (file ''bench_lmdz_32x32x39.tar.gz'') and used. One has to manually change the <syntaxhighlight lang="bash"> grid_resolution=32x32x39 </syntaxhighlight> variable in the script (before running it) to pick a different reference case (assuming it is available, see below) == Downloading test (bench) case == To download one of the test cases, simply head for https://web.lmd.jussieu.fr/~lmdz/pub/3DBenchs where you will find .tar.gz files for various GCM resolution and setups. Check out file '''000_Readme''' for more information. 05/08/2022 [[Category:FAQ]] 0e1bdbc53956e62263c854fe585e53313e782826 Some pointers about standalone installation of the XIOS library 0 120 274 2022-08-05T12:12:10Z Emillour 3 Page créée avec « This page is mostly for "do-it-yourself" people interested in installing the XIOS library, as this step is automated in the install_lmdz.sh script (if run with the ''-xios... » wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing the XIOS library, as this step is automated in the install_lmdz.sh script (if run with the ''-xios'' option). Note also that the download and installation by install_lmdz.sh is done via the use of a dedicated "install_xios.bash" script available here: https://web.lmd.jussieu.fr/~lmdz/pub/import/install_xios.bash , which could also be used in a standalone installation (run ''install_xios.bash -h'' and/or inspect the script). == Prerequisites == There are a couple of prerequisites to installing and using the XIOS library: # An MPI library must be available # A NetCDF4-HDF5 library, preferably compiled with MPI enabled, must be available The rest of this page assume all prerequisites are met. People interested in building an appropriate NetCDF library on their Linux machine might be interested in the following installation script: https://web.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash (which might need some adaptations to work in your specific case). == Downloading and compiling the XIOS library == The XIOS source code is available for download using svn (subversion), e.g.: <syntaxhighlight lang="bash"> svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk XIOS </syntaxhighlight> * To compile the library, one must first have adequate architecture "arch" files at hand, just like for the GCM (see the [[WhatIs:_The_target_architecture_("arch")_files|page about these)]]). In principle both ''arch.env'' and ''arch.path'' files could be the same as for the GCM; ''arch.fcm'' will of course differ, as XIOS source code is in C++ (along with a Fortran interface). If using a "known" machine (e.g. Occigen, Irene-Rome, Ciclad) then ready-to-use up-to-date arch files for that machine should be present in the ''arch'' directory. If not you will have to create your own (it is advised to use the existing ones as templates!) * Assuming ''some_machine'' arch files (i.e. files ''arch-some_machine.env'', ''arch-some_machine.path'', ''arch-some_machine.fcm'') are present in the '''arch''' subdirectory, compiling the XIOS is done using the dedicated ''make_xios'' script, e.g.: <syntaxhighlight lang="bash"> ./make_xios --prod --arch some_machine --job 8 </syntaxhighlight> If the compilation steps went well then the '''lib''' directory should contain file ''libxios.a'' and the '''bin''' directory should contain <pre> fcm_env.ksh generic_testcase.exe xios_server.exe </pre> == Compiling LMDZ6 with the XIOS library == To compile with XIOS enabled, one must specify the option <syntaxhighlight lang="bash"> -io xios </syntaxhighlight> to the [[WhatIs: The makelmdz fcm script|makelmdz_fcm]] script. 05/08/2022 [[Category:HowTo]] [[Category:Xios]] e4a73ef8355fbc5b2a864b3fa418b4018202491d Some pointers about standalone installation of LMDZ 0 121 275 2022-08-05T13:30:15Z Emillour 3 Page créée avec « This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version o... » wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are: # Have a Fortran compiler at hand # Have a NetCDF library (compiled with the same compiler) available # Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL) In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then: # Have a Fortran-enabled MPI library at hand # A NetCDF4-HDF5 library, preferably compiled with MPI enabled # Have the IOIPSL library available # Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS) == Downloading LMDZ6 source code == This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ6" directory: <syntaxhighlight lang=bash> svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ6 </syntaxhighlight> Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be: <pre> IOIPSL LMDZ6 XIOS </pre> To compile LMDZ one would then proceed to the LMDZ6 subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script 05/08/2022 [[Category:HowTo]] 9978129aebf38c9238200a770fe983288f0fc695 306 275 2023-01-04T16:29:07Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are: # Have a Fortran compiler at hand # Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF) # Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL) In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then: # Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI) # A NetCDF4-HDF5 library, preferably compiled with MPI enabled # Have the IOIPSL library available # Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS) == Downloading LMDZ6 source code == This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ6" directory: <syntaxhighlight lang=bash> svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ6 </syntaxhighlight> Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be: <pre> IOIPSL LMDZ6 XIOS </pre> To compile LMDZ one would then proceed to the LMDZ6 subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script 04/01/2023 [[Category:HowTo]] 2da1511cba1303b9c4032d36623b4c2e7b29b374 LMDZ zoom parameters 0 77 276 175 2022-10-10T09:54:03Z Emillour 3 wikitext text/x-wiki The "Z" in LMDZ stands for "Zoom". This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes. == Zoom parameters == In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def): * The zoom center coordinates (in degrees), ''clon'' and ''clat'' * The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it. * The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude * The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 or even 10 can also work. * It is advised to target, by adjusting number of points along longitude and latitude, to have something close to a "square" mesh (i.e. same extension, in degrees, along longitudes and latitudes) in the inner zoomed area. == Choosing an adequate time step for a zoomed simulation == The rule of thumb, starting from a "day_step" value that works for a given regular (non-zoomed) grid: day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy) It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]] 24/11/2021 [[Catégorie:Zoom]] a12bfd0c4aff30410240c7adc928e7d4de92e7e4 MediaWiki:Sidebar 8 107 277 218 2022-11-16T15:47:21Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description *** informatique *** administratif *** utilisateur *** FAQs ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES d6f17a677e11fcf6e65f150f86a5644fdf916188 278 277 2022-11-16T15:49:08Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description # informatique ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES ea8ebcaa27c963aff89b9732db970c8cb259e8df 279 278 2022-11-16T15:52:26Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description *** informatique ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES 68c98088091fbe0cce8ecaace11b0f7886ba9f53 280 279 2022-11-16T15:54:32Z Lfairhead 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES df7c604d036435a413d00baa4fd183f6a56b1543 Argument omega de la procédure physiq 0 122 281 2022-11-18T15:58:43Z Lguez 4 Page créée avec « L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est : (\partial_\eta p) \frac{\uD \eta}{\uD t} où \eta_est la coordonnée... » wikitext text/x-wiki L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est : (\partial_\eta p) \frac{\uD \eta}{\uD t} où \eta_est la coordonnée verticale hybride sigma-pression. C'est calculé en utilisant l'équation de continuité intégrée à partir du sommet, soit convm(l) - BP(l).convm(0) avec convm la convergence du flux de masse horizontal intégrée à partir du sommet. On ne peut pas recalculer omega dans la physique pour l'instant, car on ne passe pas la tendance de pression de surface (ou convm(0)). C'est une variable output de la physique, d'ailleurs systématiquement égale à 0... 12010ba62dbfde4b68470ba3c62e90e23abc3ec7 283 281 2022-11-18T16:01:19Z Lguez 4 wikitext text/x-wiki L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est : [[Fichier:omega.png]] où \eta est la coordonnée verticale hybride sigma-pression. C'est calculé en utilisant l'équation de continuité intégrée à partir du sommet, soit convm(l) - BP(l).convm(0) avec convm la convergence du flux de masse horizontal intégrée à partir du sommet. On ne peut pas recalculer omega dans la physique pour l'instant, car on ne passe pas la tendance de pression de surface (ou convm(0)). C'est une variable output de la physique, d'ailleurs systématiquement égale à 0... b310604ed93a2be6427391557db592302372af02 284 283 2022-11-18T16:03:07Z Lguez 4 wikitext text/x-wiki L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est : [[Fichier:omega.png]] où \eta est la coordonnée verticale hybride sigma-pression. C'est calculé en utilisant l'équation de continuité intégrée à partir du sommet, soit convm(l) - BP(l).convm(0) avec convm la convergence du flux de masse horizontal intégrée à partir du sommet. On ne peut pas recalculer omega dans la physique pour l'instant, car on ne passe pas la tendance de pression de surface (ou convm(0)). C'est une variable output de la physique, d'ailleurs systématiquement égale à 0... NB : omega est dans les sorties sous le nom wap, avec l'attribut long_name = "lagrangian tendency of air pressure", ce qui n'est donc pas correct. 7ab86bfc25a857bc66350faa25dd63089497954f 285 284 2022-11-18T16:08:08Z Lguez 4 wikitext text/x-wiki L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est : [[Fichier:omega.png]] où \eta est la coordonnée verticale hybride sigma-pression. C'est calculé dans la dynamique en utilisant l'équation de continuité intégrée à partir du sommet, soit : convm(l) - BP(l).convm(0) avec convm la convergence du flux de masse horizontal intégrée à partir du sommet. omega donne le flux de masse à travers les surfaces de coordonnée verticale \eta constante, et est donc utilisé dans la dynamique pour l'advection verticale. Sur les océans, c'est (à peu près) la même chose que la vitesse verticale en coordonnées pression DP/Dt, mais près de la topographie c'est assez différent et le signe peut même être opposé On ne peut pas recalculer omega dans la physique pour l'instant, car on ne passe pas la tendance de pression de surface (ou convm(0)). C'est une variable output de la physique, d'ailleurs systématiquement égale à 0... NB : omega est dans les sorties sous le nom wap, avec l'attribut long_name = "lagrangian tendency of air pressure", ce qui n'est donc pas correct. a23a9caf1f562ba02987e7b8be37f9247a617120 Fichier:Omega.png 6 123 282 2022-11-18T15:59:43Z Lguez 4 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 HowTo: debug the quality control 0 73 286 144 2022-12-12T17:40:45Z Lguez 4 wikitext text/x-wiki As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite] === How to debug a failed quality check === Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] 193bf71684670894ca2bd1fa740d2f1db2b9b012 287 286 2022-12-12T17:42:58Z Lguez 4 wikitext text/x-wiki As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite] === How to debug a failed quality check === Once a failed quality check is established, one should look in the [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk file] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh script] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] 023676ea3809f1779e7d128e085002c508b19127 288 287 2022-12-16T11:13:44Z Lguez 4 wikitext text/x-wiki As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite] === How to debug a failed quality check === Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] 586e5ac2d18ec70b066cba008a2f8721d905dffc 289 288 2022-12-16T11:15:16Z Lguez 4 wikitext text/x-wiki As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]). === How to debug a failed quality check === Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] f825333be1b842daf15c6fa654f6e167ce7403fb 290 289 2022-12-16T11:17:10Z Lguez 4 wikitext text/x-wiki As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]). === How to debug a failed quality check === Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory: lmdz-cq:/tmp/lmdz/LMDZ[version_number] with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] 2943643fc60377e64449f3eab3b17aa719099e9a WhatIs: The traceur.def input file 0 31 291 58 2023-01-03T07:24:58Z Emillour 3 wikitext text/x-wiki == The traceur.def input file tells LMDZ about the tracers to advect == The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict: * The first line contains the number n of tracers to advect in the dynamics * The n following lines contain the following set ( two integer numbers and a string): hadv , vadv, tname . hadv and vadv are traceur advection scheme numbers and tname is the tracer name '''Tracer advection schemes''' A few are coded, but not for the parallel case, so we only present the important (i.e. operational) ones here: * 0 : no advection. This tracer will not be advected by the dynamics * 10: advection using a Van Leer scheme. This is the standard advection scheme to use for tracers. * 14: a specific advection scheme for the water vapor tracer (i.e. "H2Ov") '''Illustrative example''' In practice a "traceur.def" file will look like this: 4 14 14 H2Ov 10 10 H2Ol 10 10 H2Oi 00 00 Aga In this example, there are 4 tracers, the first one is "H2Ov" (water vapor) and advected using scheme number 14, the second and third are "H2Ol" (liquid water) and "H2Oi" (water ice), and the last is called "Aga" and completely passive (i.e. untouched by the dynamics). == The tracer.def input file == Note that the use of a '''traceur.def''' file as described above is now depreciated (but should still work fine as the code is retro-compatible) and that it is recommended to now use a '''tracer.def''' as described here. 03/01/2023 [[Category:WhatIs]] c104f5b48c45d4bbf70e411e1ccea762769793e6 293 291 2023-01-03T08:08:04Z Emillour 3 wikitext text/x-wiki == The traceur.def input file tells LMDZ about the tracers to advect == The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict: * The first line contains the number n of tracers to advect in the dynamics * The n following lines contain the following set ( two integer numbers and a string): hadv , vadv, tname . hadv and vadv are traceur advection scheme numbers and tname is the tracer name '''Tracer advection schemes''' A few are coded, but not for the parallel case, so we only present the important (i.e. operational) ones here: * 0 : no advection. This tracer will not be advected by the dynamics * 10: advection using a Van Leer scheme. This is the standard advection scheme to use for tracers. * 14: a specific advection scheme for the water vapor tracer (i.e. "H2Ov") '''Illustrative example''' In practice a "traceur.def" file will look like this: 4 14 14 H2Ov 10 10 H2Ol 10 10 H2Oi 00 00 Aga In this example, there are 4 tracers, the first one is "H2Ov" (water vapor) and advected using scheme number 14, the second and third are "H2Ol" (liquid water) and "H2Oi" (water ice), and the last is called "Aga" and completely passive (i.e. untouched by the dynamics). == The tracer.def input file == Note that the use of a '''traceur.def''' file as described above is now depreciated (but should still work fine as the code is retro-compatible) and that it is recommended to now use a '''tracer.def''' as described [[WhatIs: The tracer.def input file|here]]. 03/01/2023 [[Category:WhatIs]] eb5afe57d0ebce3b6fd757940871831d8dbadef8 WhatIs: The tracer.def input file 0 124 292 2023-01-03T08:07:52Z Emillour 3 Page créée avec « == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated Wha... » wikitext text/x-wiki == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file. == Simple example of a ''tracer.def'' file == <pre> &version=1.0 &lmdz default type=tracer phases=g hadv=10 vadv=10 parent=air H2O hadv=14 vadv=14 H2O phases=ls Aga </pre> * The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format * The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core. * The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''. * Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines <pre> H2O hadv=14 vadv=14 H2O phases=ls </pre> From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as: <pre> H2O phases=g hadv=14 vadv=14 H2O phases=l H2O phases=s </pre> == A more advanced example of a ''tracer.def file'' == 03/01/2023 [[Category:WhatIs]] 36fd9cf16f766ba49bcbc0bed763b320986d121b 294 292 2023-01-03T08:14:22Z Emillour 3 wikitext text/x-wiki == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file. == Simple example of a ''tracer.def'' file == <pre> &version=1.0 &lmdz default type=tracer phases=g hadv=10 vadv=10 parent=air H2O hadv=14 vadv=14 H2O phases=ls Aga </pre> * The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format * The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core. * The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''. * Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines <pre> H2O hadv=14 vadv=14 H2O phases=ls </pre> From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as: <pre> H2O phases=g hadv=14 vadv=14 H2O phases=l H2O phases=s </pre> == A more advanced example of a ''tracer.def file'' == The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'') with two tags (''con'' and ''oce'') <pre> &version=1.0 &lmdz default hadv=10 vadv=10 phases=g parent=air type=tracer H2O hadv=14 vadv=14 H2O phases=ls RN,PB H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag </pre> 03/01/2023 [[Category:WhatIs]] 1013631164ec3221c8d6c76f75d2484629363dd9 295 294 2023-01-03T08:17:55Z Emillour 3 wikitext text/x-wiki == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file. == Simple example of a ''tracer.def'' file == <pre> &version=1.0 &lmdz default type=tracer phases=g hadv=10 vadv=10 parent=air H2O hadv=14 vadv=14 H2O phases=ls Aga </pre> * The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format * The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core. * The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''. * Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines <pre> H2O hadv=14 vadv=14 H2O phases=ls </pre> From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as: <pre> H2O phases=g hadv=14 vadv=14 H2O phases=l H2O phases=s </pre> == A more advanced example of a ''tracer.def file'' == The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'') with two tags (''con'' and ''oce'') <pre> &version=1.0 &lmdz default hadv=10 vadv=10 phases=g parent=air type=tracer H2O hadv=14 vadv=14 H2O phases=ls RN,PB H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag </pre> As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get: <pre> readTracersFiles: RAW CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | phase readTracersFiles: ----+------+------+------------------------+------------------------+------- readTracersFiles: 1 | 14 | 14 | H2O | air | g readTracersFiles: 2 | 10 | 10 | H2O | air | ls readTracersFiles: 3 | 10 | 10 | RN,PB | air | g readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls readTracersFiles: readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | igen | phase readTracersFiles: ----+------+------+---------------+-----------+------+------- readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s </pre> 03/01/2023 [[Category:WhatIs]] 912f6d86e573ae89beac5102c70a0663cc104413 296 295 2023-01-03T08:23:36Z Emillour 3 wikitext text/x-wiki == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file. == Simple example of a ''tracer.def'' file == In this example there are 4 tracers: 3 for water (one for each of its phases, gas, liquid or solid) and one called ''Aga'' <pre> &version=1.0 &lmdz default type=tracer phases=g hadv=10 vadv=10 parent=air H2O hadv=14 vadv=14 H2O phases=ls Aga </pre> * The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format * The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core. * The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''. * Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines <pre> H2O hadv=14 vadv=14 H2O phases=ls </pre> From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as: <pre> H2O phases=g hadv=14 vadv=14 H2O phases=l H2O phases=s </pre> == A more advanced example of a ''tracer.def file'' == The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'') with two tags (''con'' and ''oce'') <pre> &version=1.0 &lmdz default hadv=10 vadv=10 phases=g parent=air type=tracer H2O hadv=14 vadv=14 H2O phases=ls RN,PB H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag </pre> As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get: <pre> readTracersFiles: RAW CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | phase readTracersFiles: ----+------+------+------------------------+------------------------+------- readTracersFiles: 1 | 14 | 14 | H2O | air | g readTracersFiles: 2 | 10 | 10 | H2O | air | ls readTracersFiles: 3 | 10 | 10 | RN,PB | air | g readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls readTracersFiles: readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | igen | phase readTracersFiles: ----+------+------+---------------+-----------+------+------- readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s </pre> 03/01/2023 [[Category:WhatIs]] 22c9db846301308f42b59024a29a40f88ef91914 298 296 2023-01-03T12:00:06Z Lguez 4 wikitext text/x-wiki == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now deprecated [[WhatIs: The traceur.def input file|traceur.def]] input file. == Simple example of a ''tracer.def'' file == In this example there are 4 tracers: 3 for water (one for each of its phases, gas, liquid or solid) and one called ''Aga'' <pre> &version=1.0 &lmdz default type=tracer phases=g hadv=10 vadv=10 parent=air H2O hadv=14 vadv=14 H2O phases=ls Aga </pre> * The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format * The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core. * The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''. * Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines <pre> H2O hadv=14 vadv=14 H2O phases=ls </pre> From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as: <pre> H2O phases=g hadv=14 vadv=14 H2O phases=l H2O phases=s </pre> == A more advanced example of a ''tracer.def file'' == The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'') with two tags (''con'' and ''oce'') <pre> &version=1.0 &lmdz default hadv=10 vadv=10 phases=g parent=air type=tracer H2O hadv=14 vadv=14 H2O phases=ls RN,PB H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag </pre> As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get: <pre> readTracersFiles: RAW CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | phase readTracersFiles: ----+------+------+------------------------+------------------------+------- readTracersFiles: 1 | 14 | 14 | H2O | air | g readTracersFiles: 2 | 10 | 10 | H2O | air | ls readTracersFiles: 3 | 10 | 10 | RN,PB | air | g readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls readTracersFiles: readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | igen | phase readTracersFiles: ----+------+------+---------------+-----------+------+------- readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s </pre> 03/01/2023 [[Category:WhatIs]] 601ba4d0535f4da27d63abef11ba8c5a98063233 299 298 2023-01-03T12:01:00Z Lguez 4 wikitext text/x-wiki == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now deprecated [[WhatIs: The traceur.def input file|traceur.def]] input file. == Simple example of a ''tracer.def'' file == In this example there are 4 tracers: 3 for water (one for each of its phases, gas, liquid or solid) and one called ''Aga'' (age of air) <pre> &version=1.0 &lmdz default type=tracer phases=g hadv=10 vadv=10 parent=air H2O hadv=14 vadv=14 H2O phases=ls Aga </pre> * The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format * The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core. * The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''. * Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines <pre> H2O hadv=14 vadv=14 H2O phases=ls </pre> From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as: <pre> H2O phases=g hadv=14 vadv=14 H2O phases=l H2O phases=s </pre> == A more advanced example of a ''tracer.def file'' == The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'') with two tags (''con'' and ''oce'') <pre> &version=1.0 &lmdz default hadv=10 vadv=10 phases=g parent=air type=tracer H2O hadv=14 vadv=14 H2O phases=ls RN,PB H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag </pre> As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get: <pre> readTracersFiles: RAW CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | phase readTracersFiles: ----+------+------+------------------------+------------------------+------- readTracersFiles: 1 | 14 | 14 | H2O | air | g readTracersFiles: 2 | 10 | 10 | H2O | air | ls readTracersFiles: 3 | 10 | 10 | RN,PB | air | g readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls readTracersFiles: readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz": readTracersFiles: iq | hadv | vadv | name | parent | igen | phase readTracersFiles: ----+------+------+---------------+-----------+------+------- readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s </pre> 03/01/2023 [[Category:WhatIs]] 7e2bb9720ecf2e8fecf80282555b66ccb17c19eb The netCDF library 0 125 297 2023-01-03T11:40:27Z Emillour 3 Page créée avec « == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.un... » wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. === Checking if a NetCDF library is already available === It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. === Install via a system manager === fc69f92d1b1648808e1e4f5e1ae67f844b9b7fc9 300 297 2023-01-03T12:43:41Z Emillour 3 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. === Checking if a NetCDF library is already available === It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. === Install via a system manager === If on Ubuntu (and with admin, i.e. ''sudo'' rights) you can try <syntaxhighlight lang="bash"> sudo apt install libnetcdff-dev </syntaxhighlight> === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] 38b950d5169e06bfb99859ae3356103598e52e3d 301 300 2023-01-03T13:50:02Z Emillour 3 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. == Checking if a NetCDF library is already available == It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. == Various ways to install the NetCDF library == === Install via a system manager === If on Ubuntu (and with admin, i.e. ''sudo'' rights) you can try <syntaxhighlight lang="bash"> sudo apt install libnetcdff-dev </syntaxhighlight> === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> === Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled === This specific version is useful especially if running with the XIOS library. A prerequisite is to have an MPI library installed and available. You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf4hdf5 cd netcdf4hdf5 wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash chmod u=rwx install_netcdf4_hdf5.bash ./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1 </syntaxhighlight> You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings. Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf4hdf5/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] def08ad2b1fe3a969e4c89790d94f48d329bb7be 302 301 2023-01-03T14:19:16Z Lguez 4 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. == Checking if a NetCDF library is already available == It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. == Various ways to install the NetCDF library == === Install via a system manager === This is the easiest (and recommended) way. If on Ubuntu (and with admin, i.e. ''sudo'' rights) you can try <syntaxhighlight lang="bash"> sudo apt install netcdf-bin libnetcdff-dev </syntaxhighlight> === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> === Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled === This specific version is useful especially if running with the XIOS library. A prerequisite is to have an MPI library installed and available. You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf4hdf5 cd netcdf4hdf5 wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash chmod u=rwx install_netcdf4_hdf5.bash ./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1 </syntaxhighlight> You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings. Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf4hdf5/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] 803693a9a16c55333eac350de9996aafbfdcb95b 303 302 2023-01-03T14:29:36Z Lguez 4 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. == Checking if a NetCDF library is already available == It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. == Various ways to install the NetCDF library == === Install from the package repository of your Linux distribution === This is the easiest (and recommended) way. If your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type: <syntaxhighlight lang="bash"> sudo apt install netcdf-bin libnetcdff-dev </syntaxhighlight> === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> === Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled === This specific version is useful especially if running with the XIOS library. A prerequisite is to have an MPI library installed and available. You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf4hdf5 cd netcdf4hdf5 wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash chmod u=rwx install_netcdf4_hdf5.bash ./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1 </syntaxhighlight> You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings. Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf4hdf5/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] b74cf40a0aca35b90ccfafcdd7e9a79c05331740 304 303 2023-01-03T14:34:05Z Lguez 4 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. == Checking if a NetCDF library is already available == It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. == Various ways to install the NetCDF library == === Install from the package repository of your Linux distribution === This is the easiest (and recommended) way. For exemple, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type: <syntaxhighlight lang="bash"> sudo apt install netcdf-bin libnetcdff-dev </syntaxhighlight> === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> === Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled === This specific version is useful especially if running with the XIOS library. A prerequisite is to have an MPI library installed and available. You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf4hdf5 cd netcdf4hdf5 wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash chmod u=rwx install_netcdf4_hdf5.bash ./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1 </syntaxhighlight> You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings. Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf4hdf5/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] 69b8e04f30d24b3d0357d8a54bd231e694db7c87 305 304 2023-01-03T14:34:29Z Lguez 4 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. == Checking if a NetCDF library is already available == It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. == Various ways to install the NetCDF library == === Install from the package repository of your Linux distribution === This is the easiest (and recommended) way. For example, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type: <syntaxhighlight lang="bash"> sudo apt install netcdf-bin libnetcdff-dev </syntaxhighlight> === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> === Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled === This specific version is useful especially if running with the XIOS library. A prerequisite is to have an MPI library installed and available. You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf4hdf5 cd netcdf4hdf5 wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash chmod u=rwx install_netcdf4_hdf5.bash ./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1 </syntaxhighlight> You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings. Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf4hdf5/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] 755ab39f6186560de7ed9b8b1d28fc42ee1ddefc Building an MPI library 0 126 307 2023-01-05T10:42:47Z Emillour 3 Page créée avec « There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries == Checking if you have an Fortran enabled MPI lib... » wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == Example of installing the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/LMDZ/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI/openmpi-1.10.3 make all install </syntaxhighlight> To check that the install went well check that... == Worth knowing about == ... 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] 054d06c78abe4fc0fe2ab27b23a7f6f7c92f9414 308 307 2023-01-05T14:33:03Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == Example of installing the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/LMDZ/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI/openmpi-1.10.3 make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V </syntaxhighlight> returns something meaninful == Worth knowing about == ... 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] ab26e57bfa7a81c61ad12cf62ecb2ae03840673f 309 308 2023-01-05T14:49:43Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == using a package manager == If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with <syntaxhighlight lang="bash"> sudo apt install libopenmpi-dev openmpi-bin </syntaxhighlight> == Example of personal installation of the the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/LMDZ/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI/openmpi-1.10.3 make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V </syntaxhighlight> returns something meaningful == Worth knowing about == ... 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] a25e81a82198f0038abf1d27035575795c1fcb83 310 309 2023-01-05T15:23:17Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == using a package manager == If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with <syntaxhighlight lang="bash"> sudo apt install libopenmpi-dev openmpi-bin </syntaxhighlight> == Example of personal installation of the the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/LMDZ/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI/openmpi-1.10.3 make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V </syntaxhighlight> returns something meaningful == Worth knowing about == * '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run <syntaxhighlight lang="bash"> mpif90 --version </syntaxhighlight> * in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''' , not '''mpif90''' * It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper use to compile. Otherwise one can get some really weird results... 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] a4a2b8740ba6283a2dd797b3cbe50fd5b1d95150 311 310 2023-01-05T15:35:05Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == using a package manager == If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with <syntaxhighlight lang="bash"> sudo apt install libopenmpi-dev openmpi-bin </syntaxhighlight> == Example of personal installation of the the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/LMDZ/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI/openmpi-1.10.3 make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V </syntaxhighlight> returns something meaningful like <syntaxhighlight lang="bash"> GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. </syntaxhighlight> == A few things worth knowing about == * '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run <syntaxhighlight lang="bash"> mpif90 --version </syntaxhighlight> * in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''' , not '''mpif90''' * It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper use to compile. Otherwise one can get some really weird results... 05/01/2022 [[Category:HowTo]] [[Category:WhatIs]] 1ee0bb54bea7f05622ba91ee930e81a822511384 312 311 2023-01-06T06:35:46Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == using a package manager == If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with <syntaxhighlight lang="bash"> sudo apt install libopenmpi-dev openmpi-bin </syntaxhighlight> == Example of personal installation of the the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/LMDZ/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI/openmpi-1.10.3 make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V </syntaxhighlight> returns something meaningful like <syntaxhighlight lang="bash"> GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. </syntaxhighlight> Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution). In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/myopenmpi/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib </syntaxhighlight> == A few things worth knowing about == * '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run <syntaxhighlight lang="bash"> mpif90 --version </syntaxhighlight> * in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''', not '''mpif90''' * It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results... 05/01/2022 [[Category:HowTo]] [[Category:WhatIs]] 818b0ed3fe6e8bce5fe74c8f09f7f6b810dadc9f Some pointers about running LMDZ in parallel 0 89 313 173 2023-01-12T10:22:45Z Emillour 3 wikitext text/x-wiki Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as opposed to on a cluster or national center (surc as IDRIS or CCRT or CINES) where many tools and libraries are available. The first step is of course to have the model installed on your Linux machine, which should be relatively easy using the ''install_lmdz.sh'' script launched with appropriate option, e.g. <pre> ./install_lmdz.sh -parallel mpi_omp </pre> If unfortunately the script fails, you might need to make some adjustments and generate your own NetCDF or IOIPSL libraries and/or your own ''arch'' files. What follows assumes that necessary libraries have been correctly built and are available. The focus here is on generating appropriate arch.fcm files and then compiling and running the GCM. == Compiling and running in MPI only == A prerequisite is (obviously) to have an MPI library at hand (e.g. MPICH, OpenMPI, etc.). Also having a BLAS library at hand, although not mandatory, is recommended. If the ''install_lmdz.sh'' script ran fine (with the ''-parallel mpi_omp'' option, then this is clearly the case. Assuming that ''mpif90'' points to the MPI wrapper (to gfortran) , that the MPI library is installed in ''/my/mpi/directory/lib'', that related files to include (mpi.h) are in directory ''/my/mpi/directory/include'', that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER /my/mpi/directory/bin/mpif90 %LINK /my/mpi/directory/bin/mpif90 %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD -L/my/mpi/directory/lib -lmpi %OMP_LD </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel mpi ...... </pre> To then run LMDZ on N=4 processors would require running the command: <pre> /my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e </pre> Note that prior to running you might need to update your ''LD_LIBRARY_PATH'' environment variable to include the path to your MPI/NetCDF/BLAS libraries, especially if these are locate in non-standard paths. Note also that if you are using the IOIPSL library, then output files will be split into as many files as processors were used and should be recombined into a single file using the IOIPSL [[WhatIs: the ioipsl library|rebuild utility]]. == Compiling and running in OpenMP only == Assuming that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER gfortran %LINK gfortran %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS -fopenmp -fcray-pointer %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD %OMP_LD -fopenmp </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel omp ...... </pre> To then run LMDZ using X=4 tasks would require running the commands: <pre> export OMP_NUM_THREADS=4 export OMP_STACKSIZE=200M ./gcm_32x32x39_phylmd_para_mem.e </pre> Note that to avoid memory issues (which can easily arrive in OpenMP as separate tasks need some private memory to store their variables, which is defined by the ''OMP_STACKSIZE=...'' environment variable) it is strongly recommended to have as much stack available as possible. Which in practice means setting: <pre> ulimit -s unlimited </pre> prior to running (and in practice this can be put in your .bashrc or .bash_profile file to be always set this way). == Compiling and running in mixed MPI/OpenMP == All that is mentionned above about MPI and OpenMP applies. An example of an adequate ''arch-local.fcm'' file would be: <pre> %COMPILER /my/mpi/directory/bin/mpif90 %LINK /my/mpi/directory/bin/mpif90 %AR ar %MAKE make %FPP_FLAGS -P -traditional %FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM %BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 %PROD_FFLAGS -O3 -funroll-loops %DEV_FFLAGS -g -O1 -Wall %DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan %MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include %OMP_FFLAGS -fopenmp -fcray-pointer %BASE_LD -L/my/blas/directory/lib -lblas %MPI_LD -L/my/mpi/directory/lib -lmpi %OMP_LD -fopenmp </pre> And compiling the GCM would be done via <pre> makelmdz_fcm -arch local -parallel mpi_omp ...... </pre> To then run LMDZ using N=4 MPI processes with X=2 tasks each (i.e.using N*X=8 cores overall) would require running the commands: <pre> export OMP_NUM_THREADS=2 export OMP_STACKSIZE=200M /my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e </pre> 12/01/2023 [[Category:Parallel]] de9c8395b3c0786086338baa700d09d98c821eff Fichier:Connexion.png 6 127 314 2023-01-25T16:03:31Z Lfairhead 1 wikitext text/x-wiki Connection to the trac server a986a93708f5570cacdf402854234c9f2d4bf2b1 HowTo: Create a Trac ticket 0 128 315 2023-01-25T16:07:21Z Lfairhead 1 Page créée avec « == HowTo: Create a Trac ticket == To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something) then h... » wikitext text/x-wiki == HowTo: Create a Trac ticket == To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something) then head to https://trac.lmd.jussieu.fr/LMDZ Connect to your account, the connection link is in the red menu line on the upper left: [[Fichier:Connexion.png|vignette]] [[Category:HowTo]] c3dadfe3012b8750183c8bccfc3eb262cbd7ca9e 318 315 2023-01-25T16:42:21Z Lfairhead 1 wikitext text/x-wiki == HowTo: Create a Trac ticket == To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something) then head to https://trac.lmd.jussieu.fr/LMDZ Connect to your account, the connection link is in the red menu line on the upper left: [[Fichier:Connexion.png|vignette|none]] Once connected, you should see a new button appear in the main menu line 'Nouveau ticket': [[Fichier:Nouveau ticket.png|vignette|néant]] After clicking the 'Nouveau ticket' button, you will be taken to the following forms page [[Fichier:Ticket.png|vignette|néant]] which you need to fill out to create your ticket. Items to fill out are * ''Résumé'' : a one-line description of the problem/bug/enhancement you want the ticket for * ''Description'' : a longer description of the problem/bug/enhancement * ''Type'' : describes the type of ticket you want to create. Possible values are ** plantage / defect ** incoherences ** vérifications ** améliorations / enhancements ** formation / documentation * ''Priorité'' : describes the severity or priority you want to assign to your ticket. Possible values are ** blocker ** critical ** major ** minor ** trivial * ''Composant'' : gives an indication of the LMDZ component that is involved in your report. Possible values are ** Consolidation ** Documentation ** Dynamic core ** Environnement ** I/O ** LMDZ ** Optimisation ** Parallelisation ** Terrestrial Physics ** Tracers You can add some keywords in the 'Mots-clés' field and inform other members of the LMDZ team directly of your ticket by inserting their username in the 'Copie à' field. You can also attach some files explaining your problem to your ticket. You can finally assign your new ticket to some other member of the team by switching on the 'assign' button rather than the 'create' button and providing their username in the 'Action' grey box. Once you've filled out all these informations, you can go ahead and click the 'Création d'un nouveau ticket' button to create you ticket and voilà ! [[Category:HowTo]] 084550f693b1a875594fc3cb0c6be9ee99aa29ea 319 318 2023-01-25T18:57:37Z Lfairhead 1 wikitext text/x-wiki == HowTo: Create a Trac ticket == To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something). If you have a LMDZ svn account, you can use that account to login to the trac server. Head to https://trac.lmd.jussieu.fr/LMDZ Connect to your account, the connection link is in the red menu line on the upper left: [[Fichier:Connexion.png|vignette|none]] Once connected, you should see a new button appear in the main menu line 'Nouveau ticket': [[Fichier:Nouveau ticket.png|vignette|néant]] After clicking the 'Nouveau ticket' button, you will be taken to the following forms page [[Fichier:Ticket.png|vignette|néant]] which you need to fill out to create your ticket. Items to fill out are * ''Résumé'' : a one-line description of the problem/bug/enhancement you want the ticket for * ''Description'' : a longer description of the problem/bug/enhancement * ''Type'' : describes the type of ticket you want to create. Possible values are ** plantage / defect ** incoherences ** vérifications ** améliorations / enhancements ** formation / documentation * ''Priorité'' : describes the severity or priority you want to assign to your ticket. Possible values are ** blocker ** critical ** major ** minor ** trivial * ''Composant'' : gives an indication of the LMDZ component that is involved in your report. Possible values are ** Consolidation ** Documentation ** Dynamic core ** Environnement ** I/O ** LMDZ ** Optimisation ** Parallelisation ** Terrestrial Physics ** Tracers You can add some keywords in the 'Mots-clés' field and inform other members of the LMDZ team directly of your ticket by inserting their username in the 'Copie à' field. You can also attach some files explaining your problem to your ticket. You can finally assign your new ticket to some other member of the team by switching on the 'assign' button rather than the 'create' button and providing their username in the 'Action' grey box. Once you've filled out all these informations, you can go ahead and click the 'Création d'un nouveau ticket' button to create you ticket and voilà ! [[Category:HowTo]] d7184726c3441d76005560763fb31f64fdbe0459 Fichier:Nouveau ticket.png 6 129 316 2023-01-25T16:10:15Z Lfairhead 1 wikitext text/x-wiki Le bouton pour rajouter les tickets 51d1c3aeafbb6a052f0d2c9e3f85cae4a947b7d9 Fichier:Ticket.png 6 130 317 2023-01-25T16:13:02Z Lfairhead 1 wikitext text/x-wiki Description du formulaire de création d'un nouveau ticket 975547f075f20b1c9dafdd3dd65b4a2684327d84 Cosp 0 131 320 2023-01-27T15:19:52Z Lguez 4 Page créée avec « Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6. Le répertoire cospv2 correspond à la version récente cospv2 de... » wikitext text/x-wiki Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6. Le répertoire cospv2 correspond à la version récente cospv2 de Cosp. La différence entre les 2 versions est la réécriture avec du fortran récent et l'ajout de nouveaux diagnostics. Le répertoire cosp2 est une version intermédiaire avec des développement d'un doctorant de Jean-Louis qu'on voulait conserver et qui n'est pas maintenue. 2437dff65b67ed51d0d79de8734ae443263223ec 321 320 2023-01-27T15:28:25Z Lfairhead 1 wikitext text/x-wiki * Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6. * Le répertoire cospv2 correspond à la version récente cospv2 de Cosp. La différence entre les 2 versions est la réécriture avec du fortran récent et l'ajout de nouveaux diagnostics. * Le répertoire cosp2 est une version intermédiaire avec des développement d'un doctorant de Jean-Louis qu'on voulait conserver et qui n'est pas maintenue. 0fb04c9cb2a915ceea58f1557cb724b1784d9f9e 322 321 2023-01-27T15:30:22Z Lfairhead 1 wikitext text/x-wiki A quoi correspondent les différents répertoires cosp dans le répertoire libf/phylmd? * Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6. * Le répertoire cospv2 correspond à la version récente cospv2 de Cosp. La différence entre les 2 versions est la réécriture avec du fortran récent et l'ajout de nouveaux diagnostics. * Le répertoire cosp2 est une version intermédiaire avec des développement d'un doctorant de Jean-Louis qu'on voulait conserver et qui n'est pas maintenue. 6bb6a2d53dac58132706d90f2c692a95a4e183ac HowTo: debug the quality control 0 73 323 290 2023-02-07T14:27:39Z Lfairhead 1 wikitext text/x-wiki As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://web.lmd.jussieu.fr/~lmdz/pub/src_archives/Readme Readme]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]). === How to debug a failed quality check === Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory: lmdz-cq:/tmp/lmdz/LMDZ[version_number] with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/tmp/lmdz/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] 0adf57de53bbce173fc63c6720facb8c6e602b56 415 323 2023-07-12T10:56:40Z Lfairhead 1 wikitext text/x-wiki As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://web.lmd.jussieu.fr/~lmdz/pub/src_archives/Readme Readme]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]). === How to debug a failed quality check === Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory: lmdz-cq:/home/lmdz/tmp/LMDZ[version_number] with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/home/lmdz/tmp/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] f889462ec4f548bfe8db6ae28404c2496fb45b11 416 415 2023-07-12T10:58:28Z Lfairhead 1 wikitext text/x-wiki As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure). This note explains what to do if those regular tests reveal that the code is broken. The checks are launched by the script [https://web.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://web.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://web.lmd.jussieu.fr/~lmdz/pub/src_archives/Readme Readme]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]). === How to debug a failed quality check === Once a failed quality check is established, one should look in the file [https://web.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory: lmdz-cq:/home/lmdz/tmp/LMDZ[version_number] with the actual output file of the check_version.sh script in lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number] ('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet]. One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the lmdz-cq:/home/lmdz/tmp/LMDZ[version_number] directory. [[Category:HowTo]] [[Category:ExpertDev]] e4dd2c5147269afdcfe572b833c7ee4e39e597af Radiative transfer schemes 0 117 324 269 2023-03-06T17:23:40Z Lguez 4 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if the GCM has been compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if the GCM has been compiled with the '''-rad ecrad''' option. Three sub-options: ** McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes. ** triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM. ** triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement. f3122a9348146d0c9f89df9dd74b23b0c2e1d8d8 382 324 2023-04-03T12:31:09Z Lguez 4 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if the GCM has been compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if the GCM has been compiled with the '''-rad ecrad''' option. ECRad has three sub-options for the treatment of clouds: * McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes. * triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM. * triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement. ECRad also has two sub-options for the treatment of the gas phase: * RRTMG * ECCKD 45d20ac9585fc6473a91242d880aa804ea438f06 387 382 2023-04-24T11:50:21Z Lguez 4 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if the GCM has been compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if the GCM has been compiled with the '''-rad ecrad''' option. ECRad has three sub-options for the treatment of clouds: * McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes. * triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM. * triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement. ECRad also has two sub-options for the treatment of the gas phase: * RRTMG * ECCKD 96df22cd7c56c5112b2483651a9cc03b53f88a14 388 387 2023-04-24T11:51:53Z Lguez 4 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option. ECRad has three sub-options for the treatment of clouds: * McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes. * triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM. * triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement. ECRad also has two sub-options for the treatment of the gas phase: * RRTMG * ECCKD 4c61da349d81a0dd4904f576970892d3ff52d312 419 388 2023-09-28T14:26:08Z Lguez 4 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option. ECRad has three sub-options for the treatment of clouds: * McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes. * Tripleclouds : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiaire. Le plus proche de RRTM. * Tripleclouds avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement. ECRad also has two sub-options for the treatment of the gas phase: * RRTMG (Rapid Radiative Transfer Model for GCMs) * ECCKD (ECMWF correlated k-distribution scheme) 321fd99537724b6889fca37b91292f544975f50a 420 419 2023-10-16T14:18:21Z Lguez 4 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option. ECRad has three sub-options for the treatment of clouds: * McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes. * Tripleclouds : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiaire. Le plus proche de RRTM. * Tripleclouds avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement. ECRad also has two sub-options for the treatment of the gas phase: * RRTMG (Rapid Radiative Transfer Model for GCMs). 16 longwave bands and 14 shortwave bands. * ECCKD (ECMWF correlated k-distribution scheme) e38373dafc1ae034a753399ba9743baa2b24e2f0 421 420 2023-10-17T03:41:45Z Lguez 4 wikitext text/x-wiki There are different radiative schemes that can be used in LMDZ: * The "legacy" (oldest) radiative scheme is available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def. This is the radiative code that was used in LMDZ4. It was written by Foucart and Morcrette at ECMWF. The description of the solar part of the spectrum, in particular, is not satisfying. * RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]). * ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option. ECRad has three sub-options for the treatment of clouds: * McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes. * Tripleclouds : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiaire. Le plus proche de RRTM. * Tripleclouds avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement. ECRad also has two sub-options for the treatment of the gas phase: * RRTMG (Rapid Radiative Transfer Model for GCMs). 16 longwave bands and 14 shortwave bands. * ECCKD (ECMWF correlated k-distribution scheme) 629c781f7c69ec2319aa67e39c3558b0c1e5447d Some pointers about standalone installation of LMDZ 0 121 325 306 2023-03-10T08:22:18Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are: # Have a Fortran compiler at hand # Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF) # Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL) In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then: # Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI) # A NetCDF4-HDF5 library, preferably compiled with MPI enabled # Have the IOIPSL library available # Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS) == Downloading LMDZ6 source code == This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory: <syntaxhighlight lang=bash> svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ </syntaxhighlight> Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be: <pre> IOIPSL LMDZ XIOS </pre> To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script 10/03/2023 [[Category:HowTo]] 3071ee5634656ae29430b00625e81197e33a3d9e 383 325 2023-04-24T07:14:11Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are: # Have a Fortran compiler at hand # Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF) # Have a companion NetCDF95 library (compiled with the same compiler) available (see [[The netCDF95 library|this page]] for more about installing it) # Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL) In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then: # Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI) # A NetCDF4-HDF5 library, preferably compiled with MPI enabled # Have the IOIPSL library available # Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS) == Downloading LMDZ6 source code == This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory: <syntaxhighlight lang=bash> svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ </syntaxhighlight> Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be: <pre> IOIPSL LMDZ XIOS </pre> To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script 10/03/2023 [[Category:HowTo]] 9734d37e3da3049ebe47803ca2c733e88735fa39 385 383 2023-04-24T10:13:50Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are: # Have a Fortran compiler at hand # Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF), as well as the companion NetCDF95 library (compiled with the same compiler) available (see [[The netCDF95 library|this page]] for more about installing it) # Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL) In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then: # Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI) # A NetCDF4-HDF5 library, preferably compiled with MPI enabled # Have the IOIPSL library available # Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS) == Downloading LMDZ6 source code == This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory: <syntaxhighlight lang=bash> svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ </syntaxhighlight> Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be: <pre> IOIPSL LMDZ XIOS </pre> To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script 10/03/2023 [[Category:HowTo]] 1010d60a751afbcc00b2200fd9b3e491e1a5fa31 423 385 2023-11-21T10:39:06Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are: # Have a Fortran compiler at hand # Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF), as well as the companion NetCDF95 library (compiled with the same compiler) available (see [[The netCDF95 library|this page]] for more about installing it) # Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL) In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then: # Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI) # A NetCDF4-HDF5 library, preferably compiled with MPI enabled # Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL) # Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS) == Downloading LMDZ6 source code == This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory: <syntaxhighlight lang=bash> svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ </syntaxhighlight> Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be: <pre> IOIPSL LMDZ XIOS </pre> To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script 21/11/2023 [[Category:HowTo]] 82154c9b22c30efd98f0ad1b95b96bf10295ed81 The netCDF95 library 0 188 384 2023-04-24T07:27:12Z Emillour 3 Page créée avec « == The NetCDF95 library == This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]]. Added, and thus required, since revision 4500 (roug... » wikitext text/x-wiki == The NetCDF95 library == This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]]. Added, and thus required, since revision 4500 (roughly speaking) of the code. It is freely available from https://lguez.github.io/NetCDF95/ Along with installation instructions: https://lguez.github.io/NetCDF95/installation/ [[Category:WhatIs]] 1fbc4dea15682141878e47051ee2ffd3041eb168 386 384 2023-04-24T10:15:51Z Emillour 3 wikitext text/x-wiki == The NetCDF95 library == This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]]. Added, and thus required, since April 2023 (revision 4500, roughly speaking, of the code). It is freely available from https://lguez.github.io/NetCDF95/ Along with installation instructions: https://lguez.github.io/NetCDF95/installation/ [[Category:WhatIs]] c5bac1c773c8b0a0abc7913d5e8300a69fd6a469 407 386 2023-05-16T13:09:58Z Lguez 4 wikitext text/x-wiki == The NetCDF95 library == This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]]. Added, and thus required, since April 2023 (revision 4489 of LMDZ). It is freely available from https://lguez.github.io/NetCDF95/ Along with installation instructions: https://lguez.github.io/NetCDF95/installation/ [[Category:WhatIs]] 9658d766917f3b62dd4aa7782b81298f1cb19b4a Utilisateur:Eileen68U722 2 189 389 2023-04-27T12:16:32Z Eileen68U722 56 Page créée avec « I'm Eileen and I live in a seaside city in northern United States, Golden. I'm 39 and I'm will soon finish my study at Continuing Education and Summer Sessions.<br><br>my... » wikitext text/x-wiki I'm Eileen and I live in a seaside city in northern United States, Golden. I'm 39 and I'm will soon finish my study at Continuing Education and Summer Sessions.<br><br>my blog; [https://www.euro247-ko.com 유로247주소] 6eaa832b1c58ec5cc3729e6d75e54602fbd0acc8 HowTo: create mass flux files 0 190 390 2023-04-27T13:01:19Z Acozic 54 Page créée avec « = How to : create mass flux files for inversion models = The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option... » wikitext text/x-wiki = How to : create mass flux files for inversion models = The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Variables descriptions == phiss.standard_name='surface geopotentiel' levs.standard_name='Model Level Number' upwds.standard_name='KE sat. up. mass flux' dnwds.standard_name='KE sat. down. mass flux' fmths.standard_name='Mass flux thermals' enths.standard_name='Ent therm.' fmths.units='kg m2 s-1' enths.units='kg m2 s-1' upwds.units='kg m2 s-1' dnwds.units='kg m2 s-1' ts.standard_name='t' das.standard_name='adiabatic ascent' phis.standard_name='geopotentiel instantane' phiss.standard_name='Surface Geopotential Height' aires.standard_name='Grid area' masses.standard_name='Mass' levs.standard_name='Model Level Number' phis.standard_name='geopotentiel instantane' pbarus.standard_name='flx de masse zonal' ws.standard_name='flx de masse vert' tetas.standard_name='temperature potentielle' pbarus.units = 'kg m2/s' ws.units = 'kg m2/s' tetas.units = '-' phis.units = '-' masses.units='kg' 09bbb476af62496068eb057bab11718d631598f4 391 390 2023-04-27T13:04:01Z Acozic 54 wikitext text/x-wiki = How to : create mass flux files for inversion models = The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> Note : Actually, this option is not working with XIOS in the dynamic == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Variables descriptions == phiss.standard_name='surface geopotentiel' levs.standard_name='Model Level Number' upwds.standard_name='KE sat. up. mass flux' dnwds.standard_name='KE sat. down. mass flux' fmths.standard_name='Mass flux thermals' enths.standard_name='Ent therm.' fmths.units='kg m2 s-1' enths.units='kg m2 s-1' upwds.units='kg m2 s-1' dnwds.units='kg m2 s-1' ts.standard_name='t' das.standard_name='adiabatic ascent' phis.standard_name='geopotentiel instantane' phiss.standard_name='Surface Geopotential Height' aires.standard_name='Grid area' masses.standard_name='Mass' levs.standard_name='Model Level Number' phis.standard_name='geopotentiel instantane' pbarus.standard_name='flx de masse zonal' ws.standard_name='flx de masse vert' tetas.standard_name='temperature potentielle' pbarus.units = 'kg m2/s' ws.units = 'kg m2/s' tetas.units = '-' phis.units = '-' masses.units='kg' 4d0357dcdaabf93dcf8be1eb03963506106bdcae 392 391 2023-04-27T13:05:06Z Acozic 54 wikitext text/x-wiki = How to : create mass flux files for inversion models = The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> Note : Actually, this option is not working with XIOS in the dynamic == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Variables descriptions == phiss.standard_name='surface geopotentiel' levs.standard_name='Model Level Number' upwds.standard_name='KE sat. up. mass flux' dnwds.standard_name='KE sat. down. mass flux' fmths.standard_name='Mass flux thermals' enths.standard_name='Ent therm.' fmths.units='kg m2 s-1' enths.units='kg m2 s-1' upwds.units='kg m2 s-1' dnwds.units='kg m2 s-1' ts.standard_name='t' das.standard_name='adiabatic ascent' phis.standard_name='geopotentiel instantane' phiss.standard_name='Surface Geopotential Height' aires.standard_name='Grid area' masses.standard_name='Mass' levs.standard_name='Model Level Number' phis.standard_name='geopotentiel instantane' pbarus.standard_name='flx de masse zonal' ws.standard_name='flx de masse vert' tetas.standard_name='temperature potentielle' pbarus.units = 'kg m2/s' ws.units = 'kg m2/s' tetas.units = '-' phis.units = '-' masses.units='kg' [[Category:HowTo]] bd2668e84f195545220e42ffea9017661ed2578f 393 392 2023-04-27T13:42:18Z Acozic 54 wikitext text/x-wiki = How to : create mass flux files for inversion models = The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> Note 1: commit to come (very soon) Note 2: Actually, this option is not working with XIOS in the dynamic == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Variables descriptions == phiss.standard_name='surface geopotentiel' levs.standard_name='Model Level Number' upwds.standard_name='KE sat. up. mass flux' dnwds.standard_name='KE sat. down. mass flux' fmths.standard_name='Mass flux thermals' enths.standard_name='Ent therm.' fmths.units='kg m2 s-1' enths.units='kg m2 s-1' upwds.units='kg m2 s-1' dnwds.units='kg m2 s-1' ts.standard_name='t' das.standard_name='adiabatic ascent' phis.standard_name='geopotentiel instantane' phiss.standard_name='Surface Geopotential Height' aires.standard_name='Grid area' masses.standard_name='Mass' levs.standard_name='Model Level Number' phis.standard_name='geopotentiel instantane' pbarus.standard_name='flx de masse zonal' ws.standard_name='flx de masse vert' tetas.standard_name='temperature potentielle' pbarus.units = 'kg m2/s' ws.units = 'kg m2/s' tetas.units = '-' phis.units = '-' masses.units='kg' [[Category:HowTo]] 866a8a93737eda72f8cf051ae26a9f2680b2b03a 413 393 2023-07-05T12:10:56Z Acozic 54 wikitext text/x-wiki = How to : create mass flow files for inversion models = The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> Note: * we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608] * Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files) == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Variables descriptions == phiss.standard_name='surface geopotentiel' levs.standard_name='Model Level Number' upwds.standard_name='KE sat. up. mass flux' dnwds.standard_name='KE sat. down. mass flux' fmths.standard_name='Mass flux thermals' enths.standard_name='Ent therm.' fmths.units='kg m2 s-1' enths.units='kg m2 s-1' upwds.units='kg m2 s-1' dnwds.units='kg m2 s-1' ts.standard_name='t' das.standard_name='adiabatic ascent' phis.standard_name='geopotentiel instantane' phiss.standard_name='Surface Geopotential Height' aires.standard_name='Grid area' masses.standard_name='Mass' levs.standard_name='Model Level Number' phis.standard_name='geopotentiel instantane' pbarus.standard_name='flx de masse zonal' ws.standard_name='flx de masse vert' tetas.standard_name='temperature potentielle' pbarus.units = 'kg m2/s' ws.units = 'kg m2/s' tetas.units = '-' phis.units = '-' masses.units='kg' [[Category:HowTo]] a362b51a0ff7e1198003b1b153c12100bc518dfe 414 413 2023-07-05T12:17:05Z Acozic 54 wikitext text/x-wiki = How to : create mass flow files for inversion models = The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> Note: * we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608] * Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files) == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Variables descriptions in phystoke.nc == * Name="t_stok" long_name="Temperature" unit="K" * "coefh_stok" long_name="coeff de melange dans la couche limite" unit="-" * "fm_th_stok" long_name="Mass flux thermals" unit="kg m-2.s-1" * "en_th_stok" long_name="Thermal plume entrainment" unit="kg m-1.s-1" * "da_stok" long_name="adiabatic ascen" unit="kg m-2.s-1" * "mp_stok" long_name="precipitating downdraft mass flux under hydrostatic approximation" unit="kg m-2.s-1" * "wght_stok" long_name="weights of the layers feeding convection" unit="-" * "upwd_stok" long_name="saturated updraft mass flux" unit="kg m-2.s-1" * "dnwd_stok" long_name="saturated downdraft mass flux" unit="kg m-2.s-1" * "phi_lev"[0-79] "mass flow environmental mixing" unit="kg m-2 s-1" * "yu1_stok" long_name="zonal surface wind" unit="m.s-1" * "yv1_stok" long_name="wind meridian surface" unit="m.s-1" All of these variables are an average of offline_time frequency, on the horizontal grid with vertical level klev (and not presnivs) [[Category:HowTo]] f2db9718869a961bd74674d99d6d047a67019c98 417 414 2023-07-21T08:47:27Z Acozic 54 /* How to : create mass flow files for inversion models */ wikitext text/x-wiki = How to : create mass flow files for inversion models = The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> Note: * we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608] * Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files) == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Variables descriptions in phystoke.nc == * Name="t_stok" long_name="Temperature" unit="K" * "coefh_stok" long_name="coeff de melange dans la couche limite" unit="-" * "fm_th_stok" long_name="Mass flux thermals" unit="kg m-2.s-1" * "en_th_stok" long_name="Thermal plume entrainment" unit="kg m-1.s-1" * "da_stok" long_name="adiabatic ascen" unit="kg m-2.s-1" * "mp_stok" long_name="precipitating downdraft mass flux under hydrostatic approximation" unit="kg m-2.s-1" * "wght_stok" long_name="weights of the layers feeding convection" unit="-" * "upwd_stok" long_name="saturated updraft mass flux" unit="kg m-2.s-1" * "dnwd_stok" long_name="saturated downdraft mass flux" unit="kg m-2.s-1" * "phi_lev"[0-79] "mass flow environmental mixing" unit="kg m-2 s-1" * "yu1_stok" long_name="zonal surface wind" unit="m.s-1" * "yv1_stok" long_name="wind meridian surface" unit="m.s-1" All of these variables are an average of offline_time frequency, on the horizontal grid with vertical level klev (and not presnivs) == Variables descriptions in dynamic == * "phig" long_name="Surface geopotential height" unit="m2 s-2" * "massg" long_name="Air mass (averaged over 3 hours)" unit="kg" * "tetag" long_name="Potential temperature (averaged over 3 hours)" unit="K" * "pbarug" long_name="Zonal advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1" * "pbarvg" long_name="Meridional advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1" * "wg" long_name="Vertical advected mass flux (averaged over 3 hours)" unit="kg m-2 s-1" [[Category:HowTo]] f454f30980ed6ecd3e36942c21884bcbd1469d12 418 417 2023-07-21T08:49:49Z Acozic 54 wikitext text/x-wiki = How to : create mass flow files for inversion models = The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code> Note: * we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608] * Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files) == option offline in LMDZ == To use this option you need : * to put parameter <code>offline</code> to yes * add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code> * choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code> * if you are running with modipsl, modify lmdz.card to save mass flux files : [OutputText] List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) [OutputFiles] List= (.... ), \ (phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE) * if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc''' == Physics mass flow Variables descriptions (phystoke.nc) == * Name="t_stok" long_name="Temperature" unit="K" * "coefh_stok" long_name="coeff de melange dans la couche limite" unit="-" * "fm_th_stok" long_name="Mass flux thermals" unit="kg m-2.s-1" * "en_th_stok" long_name="Thermal plume entrainment" unit="kg m-1.s-1" * "da_stok" long_name="adiabatic ascen" unit="kg m-2.s-1" * "mp_stok" long_name="precipitating downdraft mass flux under hydrostatic approximation" unit="kg m-2.s-1" * "wght_stok" long_name="weights of the layers feeding convection" unit="-" * "upwd_stok" long_name="saturated updraft mass flux" unit="kg m-2.s-1" * "dnwd_stok" long_name="saturated downdraft mass flux" unit="kg m-2.s-1" * "phi_lev"[0-79] "mass flow environmental mixing" unit="kg m-2 s-1" * "yu1_stok" long_name="zonal surface wind" unit="m.s-1" * "yv1_stok" long_name="wind meridian surface" unit="m.s-1" All of these variables are an average of offline_time frequency, on the horizontal grid with vertical level klev (and not presnivs) == Dynamics mass flow Variables descriptions (wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) == * "phig" long_name="Surface geopotential height" unit="m2 s-2" * "massg" long_name="Air mass (averaged over 3 hours)" unit="kg" * "tetag" long_name="Potential temperature (averaged over 3 hours)" unit="K" * "pbarug" long_name="Zonal advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1" * "pbarvg" long_name="Meridional advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1" * "wg" long_name="Vertical advected mass flux (averaged over 3 hours)" unit="kg m-2 s-1" [[Category:HowTo]] d69af61a057010904bd9d5c2c72e27744e623666 Utilisateur:ErikKillough0 2 191 394 2023-04-27T14:07:59Z ErikKillough0 58 Page créée avec « I'm Erik and I live with my husband and our 3 children in Renishaw, in the NA south part. My hobbies are Origami, Running and American football.<br><br>Here is my web page... » wikitext text/x-wiki I'm Erik and I live with my husband and our 3 children in Renishaw, in the NA south part. My hobbies are Origami, Running and American football.<br><br>Here is my web page; [https://www.youtube.com/channel/UCnLbecqNrMdWqqQebCt-SYg pola slot olympus hari ini] 3266f8de6fff5392b6f82798613d4330d0ba015a Utilisateur:JettSteinberg 2 192 395 2023-04-27T14:39:28Z JettSteinberg 59 Page créée avec « I am Jett from Concord. I am learning to play the Lute. Other hobbies are Jukskei.<br><br>my webpage :: paraparesis - [https://www.uniformfactory.ae www.uniformfactory.ae] - » wikitext text/x-wiki I am Jett from Concord. I am learning to play the Lute. Other hobbies are Jukskei.<br><br>my webpage :: paraparesis - [https://www.uniformfactory.ae www.uniformfactory.ae] - 5b2ff834625156764a863706f2b4af79cf7f0a45 Utilisateur:KristoferCoyne 2 193 396 2023-04-27T20:25:33Z KristoferCoyne 57 Page créée avec « Hello dear visitor. I'm Augustus plus i totally dig that advertsing name. Years ago she moved to Vermont. My job is a supervisor for doing pretty good financially. To cook... » wikitext text/x-wiki Hello dear visitor. I'm Augustus plus i totally dig that advertsing name. Years ago she moved to Vermont. My job is a supervisor for doing pretty good financially. To cook is a thing that she is totally addicted in. Check out her website here: https://www.mavinlearning.com/newsletter/college-applications-writing-the-best-personal-statement/<br><br>Review my homepage: [https://www.mavinlearning.com/newsletter/college-applications-writing-the-best-personal-statement/ vw fort walton beach] b41cff61983c1bd0ba43692085d7d28138541c92 Utilisateur:BennyBrune76424 2 195 398 2023-04-27T21:09:52Z BennyBrune76424 68 Page créée avec « Hello and welcome. I am Mitchel. His family lives in New Jersey but now he is considering options. Going to karaoke is something I will never give inside. Supervising is w... » wikitext text/x-wiki Hello and welcome. I am Mitchel. His family lives in New Jersey but now he is considering options. Going to karaoke is something I will never give inside. Supervising is what I do for cash.<br><br>my blog post - [https://calendrier-republicain.net/ https://calendrier-republicain.net/] 2a682557a397eb688736fdaee9d755adb0852a22 Utilisateur:FranklinKinchen 2 196 399 2023-04-27T22:56:10Z FranklinKinchen 70 Page créée avec « Hello, dear friend! I am Franklin. I am happy that I can join to the entire world. I live in Belgium, in the south region. I dream to go to the different countries, to get... » wikitext text/x-wiki Hello, dear friend! I am Franklin. I am happy that I can join to the entire world. I live in Belgium, in the south region. I dream to go to the different countries, to get familiarized with interesting individuals.<br><br>Feel free to surf to my website - [https://thepearlclinicantalya.com/blog/travel/turkey-teeth/ turkish teeth] bde1686715d8e87d39e66045fabda0186d45f527 Utilisateur:DominicKater 2 197 400 2023-04-28T02:20:25Z DominicKater 74 Page créée avec « I am Dominic from Kobenhavn K. I am learning to play the Lute. Other hobbies are Paintball.<br><br>Look into my page - [https://www.uniformfactory.ae/hoodies.html hoodies... » wikitext text/x-wiki I am Dominic from Kobenhavn K. I am learning to play the Lute. Other hobbies are Paintball.<br><br>Look into my page - [https://www.uniformfactory.ae/hoodies.html hoodies subs] 620cfa9f1030bb315419191cf57e7b94bd8e6207 Utilisateur:HugoL679815044 2 198 401 2023-04-28T03:52:20Z HugoL679815044 76 Page créée avec « Hi there! :) My name is Hugo, I'm a student studying Physics from Manaus, Brazil.<br><br>Also visit my website :: [http://www.yourhealthsolutionfix.com/terms-and-condition... » wikitext text/x-wiki Hi there! :) My name is Hugo, I'm a student studying Physics from Manaus, Brazil.<br><br>Also visit my website :: [http://www.yourhealthsolutionfix.com/terms-and-conditions/ คาสิโนออนไลน์] bcb7d666a0a8d3885f1a53fe035fac792f04938d Utilisateur:EduardoMayberry 2 199 402 2023-04-28T04:33:21Z EduardoMayberry 77 Page créée avec « I am Eduardo from Foz Do Iguacu. I love to play French Horn. Other hobbies are Gaming.<br><br>my page; [https://o-magazin.ru/ скачать порно] » wikitext text/x-wiki I am Eduardo from Foz Do Iguacu. I love to play French Horn. Other hobbies are Gaming.<br><br>my page; [https://o-magazin.ru/ скачать порно] 2a85bbf22433d40a9d6f279974b317104d708e60 Utilisateur:MayaKsq680 2 200 403 2023-04-28T06:15:52Z MayaKsq680 79 Page créée avec « [https://pornososalkino.com/categories/bolshoj-chlen/ большой член] » wikitext text/x-wiki [https://pornososalkino.com/categories/bolshoj-chlen/ большой член] 72157ae11f5e0da471f79e27024676923691ed1a Utilisateur:MargaritoPedder 2 202 405 2023-04-28T08:23:13Z MargaritoPedder 84 Page créée avec « For example, for many CME and CBOT contracts, on the expiration of the December contract, the March futures become the nearest contract. » wikitext text/x-wiki For example, for many CME and CBOT contracts, on the expiration of the December contract, the March futures become the nearest contract. f16afc568a00ed6782d45936c7c5284f3d7ae946 The netCDF library 0 125 408 305 2023-05-16T13:17:14Z Lguez 4 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. == Checking if a NetCDF library is already available == It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. == Various ways to install the NetCDF library == === Install from the package repository of your Linux distribution === This is the easiest (and recommended) way. For example, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type: <syntaxhighlight lang="bash"> sudo apt install netcdf-bin libnetcdff-dev </syntaxhighlight> If you want to use XIOS with LMDZ then you need the parallel-enabled version of NetCDF. In addition to the previous '''apt install''' command, under Ubuntu or Linux Mint, type: sudo apt install libnetcdf-mpi-dev libhdf5-mpi-dev === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> === Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled === This specific version is useful especially if running with the XIOS library. A prerequisite is to have an MPI library installed and available. You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf4hdf5 cd netcdf4hdf5 wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash chmod u=rwx install_netcdf4_hdf5.bash ./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1 </syntaxhighlight> You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings. Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf4hdf5/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] ff40fbcb10def1fecef5befa920c902c6b1345fd 409 408 2023-05-16T13:19:06Z Lguez 4 wikitext text/x-wiki == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6. As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so. == Checking if a NetCDF library is already available == It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that <syntaxhighlight lang="bash"> which ncdump </syntaxhighlight> returns a positive answer. Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config''' <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections. == Various ways to install the NetCDF library == === Install from the package repository of your Linux distribution === This is the easiest and fastest (and recommended) way. For example, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type: <syntaxhighlight lang="bash"> sudo apt install netcdf-bin libnetcdff-dev </syntaxhighlight> If you want to use XIOS with LMDZ then you need the parallel-enabled version of NetCDF. In addition to the previous '''apt install''' command, under Ubuntu or Linux Mint, type: sudo apt install libnetcdf-mpi-dev libhdf5-mpi-dev === Personal installation === One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf cd netcdf wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash chmod u=rwx install_netcdf4_hdf5_seq.bash ./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1 </syntaxhighlight> Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> === Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled === This specific version is useful especially if running with the XIOS library. A prerequisite is to have an MPI library installed and available. You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and: <syntaxhighlight lang="bash"> mkdir netcdf4hdf5 cd netcdf4hdf5 wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash chmod u=rwx install_netcdf4_hdf5.bash ./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1 </syntaxhighlight> You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings. Compiling the library and dependencies can take a while (>>15 minutes; be patient). Once this is done, check file netcdf.log to verify that all went well. You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/netcdf4hdf5/bin </syntaxhighlight> The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not. Check that the installation was successfully installed :-) Again, a neat way to do that is to run and check the output of <syntaxhighlight lang="bash"> nf-config --all </syntaxhighlight> 03/01/2022 [[Category:HowTo]] [[Category:WhatIs]] e42cd837efdde01ada3def9f1770839f9f940975 Building an MPI library 0 126 410 312 2023-05-24T06:56:30Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == using a package manager == If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with <syntaxhighlight lang="bash"> sudo apt install libopenmpi-dev openmpi-bin </syntaxhighlight> == Example of personal installation of the the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/myopenmpi''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/myopenmpi/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/bin/mpif90 -V </syntaxhighlight> returns something meaningful like <syntaxhighlight lang="bash"> GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. </syntaxhighlight> Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution). In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/myopenmpi/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib </syntaxhighlight> == A few things worth knowing about == * '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run <syntaxhighlight lang="bash"> mpif90 --version </syntaxhighlight> * in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''', not '''mpif90''' * It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results... 24/05/2023 [[Category:FAQ]] c2272ac5b296f023efccfc42a43068ab33fc7426 411 410 2023-05-24T06:58:09Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == using a package manager == If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with <syntaxhighlight lang="bash"> sudo apt install libopenmpi-dev openmpi-bin </syntaxhighlight> == Example of personal installation of the the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/myopenmpi''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/myopenmpi/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/bin/mpif90 -V </syntaxhighlight> returns something meaningful like <syntaxhighlight lang="bash"> GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. </syntaxhighlight> Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution). In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/myopenmpi/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib </syntaxhighlight> == A few things worth knowing about == * '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run <syntaxhighlight lang="bash"> mpif90 --version </syntaxhighlight> * in some cases the Fortran wrapper is called '''mpifort''' or '''mpiifort''' (e.g. with ifort) , not '''mpif90''' * It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results... 24/05/2023 [[Category:FAQ]] 3a5e434354bd4fceb441921dc29dafd3cc3084b0 412 411 2023-05-24T07:02:05Z Emillour 3 wikitext text/x-wiki There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries == Checking if you have an Fortran enabled MPI library already installed and at hand == This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that <syntaxhighlight lang="bash"> which mpif90 </syntaxhighlight> returns something meaningful == using a package manager == If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with <syntaxhighlight lang="bash"> sudo apt install libopenmpi-dev openmpi-bin </syntaxhighlight> == Example of personal installation of the the OpenMPI library == To adapt to fit your onw needs and system specificities, obviously. In the example below the installation is done in the '''$HOME/myopenmpi''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable. <syntaxhighlight lang="bash"> PATH_OPENMPI=$HOME/myopenmpi/ mkdir -p $PATH_OPENMPI cd $PATH_OPENMPI wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz gunzip openmpi-1.10.3.tar.gz tar xvf openmpi-1.10.3.tar cd openmpi-1.10.3 ./configure --prefix $PATH_OPENMPI make all install </syntaxhighlight> To check that the install went well check that <syntaxhighlight lang="bash"> $PATH_OPENMPI/bin/mpif90 -V </syntaxhighlight> returns something meaningful like <syntaxhighlight lang="bash"> GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. </syntaxhighlight> Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution). In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add: <syntaxhighlight lang="bash"> export PATH=$PATH:$HOME/myopenmpi/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib </syntaxhighlight> == A few things worth knowing about == * '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run <syntaxhighlight lang="bash"> mpif90 --version </syntaxhighlight> * in some cases the Fortran wrapper is called '''mpifort''' or '''mpiifort''' (e.g. with ifort, sometimes) , not '''mpif90''' * It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results... 24/05/2023 [[Category:FAQ]] f94ec7895d07c7f71b58857fd392c6cd1a243fa7 The flag aerosol strat parameter 0 204 422 2023-11-21T08:56:12Z Emillour 3 Page créée avec « The '''flag_aerosol_strat''' parameter is an integer flag which sets which forcing is used for stratospheric aerosols optical properties (i.e. format of the taustrat*.nc f... » wikitext text/x-wiki The '''flag_aerosol_strat''' parameter is an integer flag which sets which forcing is used for stratospheric aerosols optical properties (i.e. format of the taustrat*.nc files read by the model; see https://trac.lmd.jussieu.fr/LMDZ/browser/LMDZ6/trunk/libf/phylmd/readaerosolstrato_m.F90) : * flag_aerosol_strat = 0 : no stratospheric aerosols (default value) * flag_aerosol_strat = 1 : old forcings (only case; only one optical parameter) * flag_aerosol_strat = 2 : 2 files corresponding to SW and LW spectral bands (files tauswstrat.2D.nc and taulwstrat.2D.nc) with 3 optical parameters. This option was introduced for CMIP6 runs using RRTM (i.e. requires rrtm=1 flag) 21/11/2023 [[Category:WhatIs]] [[Category:Inputs]] c93949a92e9ad06c57cf22f8eeeefbba500ac738 Some pointers about standalone installation of the XIOS library 0 120 424 274 2023-11-21T10:43:57Z Emillour 3 wikitext text/x-wiki This page is mostly for "do-it-yourself" people interested in installing the XIOS library, as this step is automated in the install_lmdz.sh script (if run with the ''-xios'' option). Note also that the download and installation by install_lmdz.sh is done via the use of a dedicated "install_xios.bash" script available here: https://web.lmd.jussieu.fr/~lmdz/pub/script_install/install_xios.bash , which could also be used in a standalone installation (run ''install_xios.bash -h'' and/or inspect the script). == Prerequisites == There are a couple of prerequisites to installing and using the XIOS library: # An MPI library must be available # A NetCDF4-HDF5 library, preferably compiled with MPI enabled, must be available The rest of this page assume all prerequisites are met. People interested in building an appropriate NetCDF library on their Linux machine might be interested in the following installation script: https://web.lmd.jussieu.fr/~lmdz/pub/script_install/install_netcdf4_hdf5.bash (which might need some adaptations to work in your specific case). == Downloading and compiling the XIOS library == The XIOS source code is available for download using svn (subversion), e.g.: <syntaxhighlight lang="bash"> svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk XIOS </syntaxhighlight> * To compile the library, one must first have adequate architecture "arch" files at hand, just like for the GCM (see the [[WhatIs:_The_target_architecture_("arch")_files|page about these)]]). In principle both ''arch.env'' and ''arch.path'' files could be the same as for the GCM; ''arch.fcm'' will of course differ, as XIOS source code is in C++ (along with a Fortran interface). If using a "known" machine (e.g. Occigen, Irene-Rome, Ciclad) then ready-to-use up-to-date arch files for that machine should be present in the ''arch'' directory. If not you will have to create your own (it is advised to use the existing ones as templates!) * Assuming ''some_machine'' arch files (i.e. files ''arch-some_machine.env'', ''arch-some_machine.path'', ''arch-some_machine.fcm'') are present in the '''arch''' subdirectory, compiling the XIOS is done using the dedicated ''make_xios'' script, e.g.: <syntaxhighlight lang="bash"> ./make_xios --prod --arch some_machine --job 8 </syntaxhighlight> If the compilation steps went well then the '''lib''' directory should contain file ''libxios.a'' and the '''bin''' directory should contain <pre> fcm_env.ksh generic_testcase.exe xios_server.exe </pre> == Compiling LMDZ6 with the XIOS library == To compile with XIOS enabled, one must specify the option <syntaxhighlight lang="bash"> -io xios </syntaxhighlight> to the [[WhatIs: The makelmdz fcm script|makelmdz_fcm]] script. 05/08/2022 [[Category:HowTo]] [[Category:Xios]] afa660248b820deb7611eff1e3bbd740cca49bbb Strataer 0 205 425 2023-11-22T13:29:51Z Lguez 4 Page créée avec « StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injecti... » wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics. En entrée on a un fichier avec les climatologies sur une période des précurseurs des aérosols OCS, SO2 et H2SO5 + leur durée de vie moyenne (générées avec un modèle de chimie complète). Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. d40c0b77d3fa13cc2e519a2e4c3de71df989784b 426 425 2023-11-22T13:30:53Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics. En entrée on a un fichier avec les climatologies sur une période des précurseurs des aérosols OCS, SO2 et H2SO5 + leur durée de vie moyenne (générées avec un modèle de chimie complète). Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. 543b21c26e4ce3e009d81dac603f51f35fb0ed9a 427 426 2023-11-22T14:02:14Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. 9a4f39ff910ba3269e5703875e879c27a3a16572 428 427 2023-11-22T14:03:04Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. da30b9a2aabdf94347e40e46a7176d01b022b7d1 429 428 2023-11-22T14:06:49Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. e6d2fec89a713217de6896a8dbded9871cd80a1a 430 429 2023-11-22T14:07:25Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. 3af2bc1947edb8df14580f1ae110487620541b7a 431 430 2023-11-22T14:16:19Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. 32ce878da3509f14a7fd07f995e92c474011ff3a 432 431 2023-11-22T14:38:09Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Mots-clefs : aérosol, aerosol e001fb72f3cb11d18e7217aa97b7e42ec734c030 433 432 2023-11-22T14:53:49Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Références : https://doi.org/10.5194/gmd-10-3359-2017 https://doi.org/10.5194/acp-21-3317-2021 Mots-clefs : aérosol, aerosol be89f5ef49b891cef34310c26163079e1450dffa 434 433 2023-11-22T14:54:38Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Références : - https://doi.org/10.5194/gmd-10-3359-2017 - https://doi.org/10.5194/acp-21-3317-2021 Mots-clefs : aérosol, aerosol b4f96887153b5544a494355d881ae9aa91624cf5 435 434 2023-11-22T14:55:52Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Références : * https://doi.org/10.5194/gmd-10-3359-2017 * https://doi.org/10.5194/acp-21-3317-2021 Mots-clefs : aérosol, aerosol 0d7368f54a49d155e1fe935cbd237e09c3913e10 436 435 2023-11-22T15:13:17Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Références : * https://doi.org/10.5194/gmd-10-3359-2017 * https://doi.org/10.5194/acp-21-3317-2021 Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm<code/>. Mots-clefs : aérosol, aerosol d11420a546adf309d32c1f4860f698436df19a12 437 436 2023-11-22T15:13:35Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Références : * https://doi.org/10.5194/gmd-10-3359-2017 * https://doi.org/10.5194/acp-21-3317-2021 Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>. Mots-clefs : aérosol, aerosol e3493c7d16e5636ced67b1c74976244c7e947940 439 437 2024-01-19T06:06:20Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ. Références : * https://doi.org/10.5194/gmd-10-3359-2017 * https://doi.org/10.5194/acp-21-3317-2021 Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>. Mots-clefs : aérosol, aerosol b1672665be1679885d36d110736c92328d732e15 440 439 2024-01-19T14:33:08Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ. Une exécution de LMDZ avec Strataer peut partir de fichiers restart d'une exécution sans Strataer. Références : * https://doi.org/10.5194/gmd-10-3359-2017 * https://doi.org/10.5194/acp-21-3317-2021 Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>. Mots-clefs : aérosol, aerosol 98efaa1d17b9164956f424cf4ba54079b72ee73e 443 440 2024-04-10T17:46:23Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportés, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ. Une exécution de LMDZ avec Strataer peut partir de fichiers restart d'une exécution sans Strataer. Références : * https://doi.org/10.5194/gmd-10-3359-2017 * https://doi.org/10.5194/acp-21-3317-2021 Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>. Mots-clefs : aérosol, aerosol 163b8afe6b0e4306225e12e89a2198ac9d00f1f5 444 443 2024-04-10T17:47:49Z Lguez 4 wikitext text/x-wiki StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportés, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc. En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols. En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation. Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques. Une exécution de LMDZ avec Strataer peut partir de fichiers restart d'une exécution sans Strataer. Références : * https://doi.org/10.5194/gmd-10-3359-2017 * https://doi.org/10.5194/acp-21-3317-2021 Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>. Mots-clefs : aérosol, aerosol 671c649ce01b1296b55767a919f196349f8721ef Howto: Run with the ORCHIDEE continental surface model 0 206 438 2024-01-03T16:23:13Z Emillour 3 Page créée avec « == The ORCHIDEE continental surface model == This model is separate from LMDZ in the sense that it can be run on its own and that its source code is not included in the LM... » wikitext text/x-wiki == The ORCHIDEE continental surface model == This model is separate from LMDZ in the sense that it can be run on its own and that its source code is not included in the LMDZ repository. You can check out the official ORCHIDEE website here : https://orchidee.ipsl.fr/ === Coupling with LMDZ === Coupling between LMDZ and ORCHIDEE is however implemented and merely requires that: # The ORCHIDEE source code is available alongside the LMDZ directory (not mandatory but must match what is given in the arch.path file, see [[WhatIs: The target architecture ("arch") files]]) # The GCM must be compiled with the adequate "-v" option (see [[WhatIs: The makelmdz fcm script]]), i.e. "-v orchideetrunk" or "-v orchidee2.1" or "-v orchidee2.0" or "-v orchidee1.9"; use "makelmdz_fcm -h" to learn more about these) # the "VEGET" parameter in config.def should be set to "y": <pre> VEGET=y </pre> Note that if "VEGET" is set to "n" then a simple bucket scheme will be used. === ORCHIDEE parameters === There are many! All usually grouped in a "orchidee.def" file === ORCHIDEE input and output files === ... 03/01/2024 [[Category:HowTo]] da149d66392286dccdb05b7340000d638a1ce3c3 Cible tuning glob.rt LMDZ amip 0 207 441 2024-03-25T16:24:06Z Mcoulon 16 Page créée avec « == La métriques glob.rt == La métriques glob.rt c'est le rayonnement totale à TOA (rt) moyenné sur tout le globe (glob), utilisée lors du tuning de LMDZ en configura... » wikitext text/x-wiki == La métriques glob.rt == La métriques glob.rt c'est le rayonnement totale à TOA (rt) moyenné sur tout le globe (glob), utilisée lors du tuning de LMDZ en configuration AMIP. C'est une métrique complètement différentes des autres, car la valeur moyenne visée et la tolérance ne correspondent pas à des observations. Pour résumer, je dirais que cette métrique à pour but de garantir des SSTs correcte lors du passage de LMDZ AMIP au modèle couplé (=LMDZ+NEMO). En gros, si on change de 1$$W/m^2$$ le glob.rt dans LMDZ, on change de 1°C la température de surface dans le modèle couplé. === Principe de "gregory" === Ce fameux gregory a montré, pour le système couplé (atmosphère + océan), que : \begin{equation} \Delta G = \Delta F + \eta \Delta T \label{eq:greg} \end{equation} Avec : * G : le rayonnement totale à TOA ($$W/m^2$$) * $$\Delta F$$ : forçage ($$W/m^2$$) * T : la température de surface du globe * $$\eta$$ : constante * $$\Delta$$ : écart avec une simulation de référence équilibrée === Appliqué a une expérience de doublement de CO2 === Si on prend l'exemple d'une expérience où l'on double la concentration de $$CO_2$$. On a d'une part une simulation de référence équilibrée (piControl) et une autre expérience où l'on double le $$CO_2$$. Le $$\Delta$$ c'est donc l'écart entre ces deux simulations. On trace $$\Delta G$$ vs $$\Delta T$$ pour chaque année de la simulation avec $$2$$x$$CO_2$$ et on obtient une droite (qui en pratique n'attent jamais ni le $$\Delta G = 0$$, ni le $$\Delta T$$ = 0). Le $$\Delta F$$ est définie comme le désiquilibre énergetique au sommet de l'atmosphère ($$\Delta G$$) lorsque le modèle n'a pas encore eu le temps de changer sa température de surface $$\Delta T = 0$$ dans l'équation \ref{eq:greg}. En pratique cet état n'est jamais atteint, mais une extrapolation des points permet de l'évaluer. Le $$\Delta T$$ lorsque le modèle est équilibré (c'est-à-dire lorsque $$\Delta G = 0$$) est l'augmentation de la température de surface du globe, suite au forçage radiatif $$\Delta F$$, lorsque le modèle c'est rééquilibré. Dans le cadre de cette expérienc de doublement de $$CO_2$$, le $$\Delta T$$ atteint lorsque le modèle est revenu à l'équilibre est l'ECS (Equilibrium Climate Sensibility). On atteint jamais le $$\Delta G$$ car les modèles ne conservent pas l'énergie (perte de l'ordre de $$0.5$$ $$W/m^2$$). Dans ce type d'expérience, les SSTs vont s'ajuster de manière exponentielle vers leur valeur d'équilibre, avec une constante de temps de l'ordre de $$20$$ à $$30$$ ans, ce qui correspondt à l'ajustement de l'océan de surface (première dizaine de mètres). === Appliqué aux expériences forcées vs couplées === De manière similaire, on prend comme référence une simulation équilibrée couplée ; mais cette fois réalisée en "present day" (pdControl). Notre simulation perturbée dans ce cadre c'est une simulation du même type mais avec une physique différente (des paramètres libres différents par exemple dans le cadre du tuning). Le $$\Delta$$ est alors l'écart entre ces deux simulations. Si on fait les mêmes simulations en amip, on a (en gros) $$\Delta T_a = 0 $$ tout le temps car les SSTs sont imposées (on voit bien que ce n'est pas exactement vrai car il y a la température des continent qui rentre dans le $$\Delta T_a$$ et qui est libre en amip). Donc, si on applique l'équation \ref{eq:greg} avec $$\Delta T_a = 0 $$ on a $$\Delta F_a = \Delta G_a$$ (différent de zéro car en amip on n'équilibre par le bilan radiatif au sommet). La différence de forçage radiatif correspond à la différence de bilan au sommet de l'atmosphère. On fait l'hypothèse que $$\Delta F_a = \Delta F_c$$. (avec $$\Delta F_c$$ la différence de forçage entre les deux simulations en couplé). Le changement de forçage (du au changement de configuration) entre les deux simulations en amip et en cmip sont les même. On a alors : \begin{equation} \Delta G_c = \Delta F_a + \eta \Delta T_c \end{equation} On veut conserver, en couplé et à l'équilibre, des SSTs qui ressemblent à la référence. On veut donc que $$\Delta T_c^{\infty} = 0 $$ avec $$\Delta G_c^{\infty} = 0$$. Donc on veut que $$\Delta F_a = 0$$ (le forçage ne dépend pas du temps). ==== Comment on arrive à la valeur de référence pour glob.rt ? ==== En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt. En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt. ==== Utilisation d'abaque : ==== On atteint jamais exatement la valeur cible de glob.rt avec le tuning, même si on met une tolérance très petite. Pour corriger cette erreure et arriver exactement à $$2.7$$ $$W/m^2$$, on utilise un abaque de $$\Delta F$$ vs cld\_lc. cld\_lc est une paramètre libre qui représente le seuil à partir duquel l'eau nuageuse est converti en précipitation (dans le schéma de précipitation grande échelle) et est très fortement corrélée au rayonnement au sommet de l'atmosphère. ==== Choix de la tolérance à l'erreur que l'on se donne : ==== Comment determiner la tolérance que l'on met autour de la valeur de référence pour glob.rt ? On a un premier ensemble de simulation avec les paramètres libres perturbés, en amip et en couplé. On trace la forçage des simulations amip vs la SST moyenne sur 20 ans qui forment une droite avec une certaine variabilité autour. La tolérance est alors la variabilité de $$F$$ pour la bonne SST de référence, qui vaut environ $$1$$ $$W/m^2$$. Cette question de la tolérance reste une question. On note que la SST de référence est celle entre $$50°N$$ et $$50°S$$ (pour éviter des problèmes d'observations près des pôles à cause de la banquise). ==== Qu'est ce qu'il y a dans ces $$2.7$$ $$W/m^2$$ ? ==== Déjà, ce $$2.7$$ $$W/m^2$$ n'est pas immuamble ou fixe. Dans le tuning actuel du modèle couplé, avec une nouvelle version de NEMO, cette valeur est beaucoup plus grande (autour de $$5$$ $$W/m^2$$ je crois, à vérifier). On considère que cette valeure, qui est donc l'écart entre le rayonnement totale à TOA d'une simulation couplée et d'une simulation amip, change peu lorsque l'on modifie les paramètres libres lors de l'exercice de tuning. Cette hypothèse était très vérifiée lors d'exercice de tuning à la main (car petites variation de paramètres), mais l'est potentiellement moins quand on tune avec Hightune explorer car on va visiter de vaste région de paramètre libre. \textbf{Il faut garder en tête que quand la configuration du modèle change beaucoup il faut réévaluer la valeur de référence de glob.rt La différence majeure entre les simulations amip et couplé est la position des jets ; qui se rapprochent de l'équateur en couplé. Cela créé plus de nuages dans les régions tropicales (qui sont en amip un peu plus au nord) qui renvoient donc plus de rayonnement vers l'atmosphère (car dans des régions avec plus de rayonnement incident). Cette variation de la position de jet entraine un climat plus froid en couplé qu'en amip. Il a été montré que ce biais sur la position des jets était du (que ce soit en amip ou en couplé) à la résolution du modèle. Lorsque l'on impose les SSTs (en amip) on réduit ce biais car les jets sont liés aux gradients de température. D'autres choses peuvent expliquer cette différence de rayonnement TOA entre amip et couplé : les patterns de SST, la banquise (et j'oublie peut-être d'autre chose). Cette question est actuellement abordée par l'équipe qui fait le tuning du modèle couplé. == Point sur les protocoles de controle == On a deux protocoles de controle, le controle pré-industriel (piControl) et le controle "present day" (pdControl). Pour faire le controle pré-industriel on fait des milliers d'années de simulations couplé avec les forçages pré-industriel. Pour faire le controle "present day" on fait aussi des milliers d'années de simulations couplé avec les forçages présents, sauf qu'actuellement on a un déséquilibre au sommet de l'atmosphère $$G = -0.8$$ $$W/m^2$$ du au fait que l'océan absorbe une partie du forçage radiatif anthropique (ocean heat uptake). Si le modèle était parfait (pas de fuite d'énergie) on aurait donc un climat de $$0.8^\circ C$$ trop chaud. Pour faire en sorte qu'à l'équilibre ($$G_c=0$$) on soit à la bonne température, on booste l'albédo de l'océan d'environ $$10\%$$. On pourrait aussi changer la constante solaire ; mais l'avantage en boostant l'albedo de l'océan c'est que ça se passe au même endroit où la chaleur est prise en vrai par l'océan. Par contre, on prend pas en compte la répartitution latitudinale des changements. On choisit de faire le tuning avec des protocoles present day et pas pré-industriel pour plusieurs raisons. Déjà on a beaucoup plus d'observations. En plus on est sur que en partant du pre-industriel (avec un modèle tuné au present day) on va bien passer par la température actuelle lors des protocoles de changement climatiques. Si on tune au pre-industriel, la température actuelle simulée par le modèle va dépendre de sa sensibilité climatique. 49a1064378401e0271cf14468455573bfec1a670 442 441 2024-03-25T16:24:27Z Mcoulon 16 wikitext text/x-wiki == La métriques glob.rt == La métriques glob.rt c'est le rayonnement totale à TOA (rt) moyenné sur tout le globe (glob), utilisée lors du tuning de LMDZ en configuration AMIP. C'est une métrique complètement différentes des autres, car la valeur moyenne visée et la tolérance ne correspondent pas à des observations. Pour résumer, je dirais que cette métrique à pour but de garantir des SSTs correcte lors du passage de LMDZ AMIP au modèle couplé (=LMDZ+NEMO). En gros, si on change de 1$$W/m^2$$ le glob.rt dans LMDZ, on change de 1°C la température de surface dans le modèle couplé. === Principe de "gregory" === Ce fameux gregory a montré, pour le système couplé (atmosphère + océan), que : \begin{equation} \Delta G = \Delta F + \eta \Delta T \label{eq:greg} \end{equation} Avec : * G : le rayonnement totale à TOA ($$W/m^2$$) * $$\Delta F$$ : forçage ($$W/m^2$$) * T : la température de surface du globe * $$\eta$$ : constante * $$\Delta$$ : écart avec une simulation de référence équilibrée === Appliqué a une expérience de doublement de CO2 === Si on prend l'exemple d'une expérience où l'on double la concentration de $$CO_2$$. On a d'une part une simulation de référence équilibrée (piControl) et une autre expérience où l'on double le $$CO_2$$. Le $$\Delta$$ c'est donc l'écart entre ces deux simulations. On trace $$\Delta G$$ vs $$\Delta T$$ pour chaque année de la simulation avec $$2$$x$$CO_2$$ et on obtient une droite (qui en pratique n'attent jamais ni le $$\Delta G = 0$$, ni le $$\Delta T$$ = 0). Le $$\Delta F$$ est définie comme le désiquilibre énergetique au sommet de l'atmosphère ($$\Delta G$$) lorsque le modèle n'a pas encore eu le temps de changer sa température de surface $$\Delta T = 0$$ dans l'équation \ref{eq:greg}. En pratique cet état n'est jamais atteint, mais une extrapolation des points permet de l'évaluer. Le $$\Delta T$$ lorsque le modèle est équilibré (c'est-à-dire lorsque $$\Delta G = 0$$) est l'augmentation de la température de surface du globe, suite au forçage radiatif $$\Delta F$$, lorsque le modèle c'est rééquilibré. Dans le cadre de cette expérienc de doublement de $$CO_2$$, le $$\Delta T$$ atteint lorsque le modèle est revenu à l'équilibre est l'ECS (Equilibrium Climate Sensibility). On atteint jamais le $$\Delta G$$ car les modèles ne conservent pas l'énergie (perte de l'ordre de $$0.5$$ $$W/m^2$$). Dans ce type d'expérience, les SSTs vont s'ajuster de manière exponentielle vers leur valeur d'équilibre, avec une constante de temps de l'ordre de $$20$$ à $$30$$ ans, ce qui correspondt à l'ajustement de l'océan de surface (première dizaine de mètres). === Appliqué aux expériences forcées vs couplées === De manière similaire, on prend comme référence une simulation équilibrée couplée ; mais cette fois réalisée en "present day" (pdControl). Notre simulation perturbée dans ce cadre c'est une simulation du même type mais avec une physique différente (des paramètres libres différents par exemple dans le cadre du tuning). Le $$\Delta$$ est alors l'écart entre ces deux simulations. Si on fait les mêmes simulations en amip, on a (en gros) $$\Delta T_a = 0 $$ tout le temps car les SSTs sont imposées (on voit bien que ce n'est pas exactement vrai car il y a la température des continent qui rentre dans le $$\Delta T_a$$ et qui est libre en amip). Donc, si on applique l'équation \ref{eq:greg} avec $$\Delta T_a = 0 $$ on a $$\Delta F_a = \Delta G_a$$ (différent de zéro car en amip on n'équilibre par le bilan radiatif au sommet). La différence de forçage radiatif correspond à la différence de bilan au sommet de l'atmosphère. On fait l'hypothèse que $$\Delta F_a = \Delta F_c$$. (avec $$\Delta F_c$$ la différence de forçage entre les deux simulations en couplé). Le changement de forçage (du au changement de configuration) entre les deux simulations en amip et en cmip sont les même. On a alors : \begin{equation} \Delta G_c = \Delta F_a + \eta \Delta T_c \end{equation} On veut conserver, en couplé et à l'équilibre, des SSTs qui ressemblent à la référence. On veut donc que $$\Delta T_c^{\infty} = 0 $$ avec $$\Delta G_c^{\infty} = 0$$. Donc on veut que $$\Delta F_a = 0$$ (le forçage ne dépend pas du temps). ==== Comment on arrive à la valeur de référence pour glob.rt ? ==== En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt. En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt. ==== Utilisation d'abaque : ==== On atteint jamais exatement la valeur cible de glob.rt avec le tuning, même si on met une tolérance très petite. Pour corriger cette erreure et arriver exactement à $$2.7$$ $$W/m^2$$, on utilise un abaque de $$\Delta F$$ vs cld\_lc. cld\_lc est une paramètre libre qui représente le seuil à partir duquel l'eau nuageuse est converti en précipitation (dans le schéma de précipitation grande échelle) et est très fortement corrélée au rayonnement au sommet de l'atmosphère. ==== Choix de la tolérance à l'erreur que l'on se donne : ==== Comment determiner la tolérance que l'on met autour de la valeur de référence pour glob.rt ? On a un premier ensemble de simulation avec les paramètres libres perturbés, en amip et en couplé. On trace la forçage des simulations amip vs la SST moyenne sur 20 ans qui forment une droite avec une certaine variabilité autour. La tolérance est alors la variabilité de $$F$$ pour la bonne SST de référence, qui vaut environ $$1$$ $$W/m^2$$. Cette question de la tolérance reste une question. On note que la SST de référence est celle entre $$50°N$$ et $$50°S$$ (pour éviter des problèmes d'observations près des pôles à cause de la banquise). ==== Qu'est ce qu'il y a dans ces $$2.7$$ $$W/m^2$$ ? ==== Déjà, ce $$2.7$$ $$W/m^2$$ n'est pas immuamble ou fixe. Dans le tuning actuel du modèle couplé, avec une nouvelle version de NEMO, cette valeur est beaucoup plus grande (autour de $$5$$ $$W/m^2$$ je crois, à vérifier). On considère que cette valeure, qui est donc l'écart entre le rayonnement totale à TOA d'une simulation couplée et d'une simulation amip, change peu lorsque l'on modifie les paramètres libres lors de l'exercice de tuning. Cette hypothèse était très vérifiée lors d'exercice de tuning à la main (car petites variation de paramètres), mais l'est potentiellement moins quand on tune avec Hightune explorer car on va visiter de vaste région de paramètre libre. Il faut garder en tête que quand la configuration du modèle change beaucoup il faut réévaluer la valeur de référence de glob.rt La différence majeure entre les simulations amip et couplé est la position des jets ; qui se rapprochent de l'équateur en couplé. Cela créé plus de nuages dans les régions tropicales (qui sont en amip un peu plus au nord) qui renvoient donc plus de rayonnement vers l'atmosphère (car dans des régions avec plus de rayonnement incident). Cette variation de la position de jet entraine un climat plus froid en couplé qu'en amip. Il a été montré que ce biais sur la position des jets était du (que ce soit en amip ou en couplé) à la résolution du modèle. Lorsque l'on impose les SSTs (en amip) on réduit ce biais car les jets sont liés aux gradients de température. D'autres choses peuvent expliquer cette différence de rayonnement TOA entre amip et couplé : les patterns de SST, la banquise (et j'oublie peut-être d'autre chose). Cette question est actuellement abordée par l'équipe qui fait le tuning du modèle couplé. == Point sur les protocoles de controle == On a deux protocoles de controle, le controle pré-industriel (piControl) et le controle "present day" (pdControl). Pour faire le controle pré-industriel on fait des milliers d'années de simulations couplé avec les forçages pré-industriel. Pour faire le controle "present day" on fait aussi des milliers d'années de simulations couplé avec les forçages présents, sauf qu'actuellement on a un déséquilibre au sommet de l'atmosphère $$G = -0.8$$ $$W/m^2$$ du au fait que l'océan absorbe une partie du forçage radiatif anthropique (ocean heat uptake). Si le modèle était parfait (pas de fuite d'énergie) on aurait donc un climat de $$0.8^\circ C$$ trop chaud. Pour faire en sorte qu'à l'équilibre ($$G_c=0$$) on soit à la bonne température, on booste l'albédo de l'océan d'environ $$10\%$$. On pourrait aussi changer la constante solaire ; mais l'avantage en boostant l'albedo de l'océan c'est que ça se passe au même endroit où la chaleur est prise en vrai par l'océan. Par contre, on prend pas en compte la répartitution latitudinale des changements. On choisit de faire le tuning avec des protocoles present day et pas pré-industriel pour plusieurs raisons. Déjà on a beaucoup plus d'observations. En plus on est sur que en partant du pre-industriel (avec un modèle tuné au present day) on va bien passer par la température actuelle lors des protocoles de changement climatiques. Si on tune au pre-industriel, la température actuelle simulée par le modèle va dépendre de sa sensibilité climatique. b33ba618cf33c7297a1ece74c6d78b85f658081f